在 64 位 linux 上返回 C 代码 x86 编译中的汇编函数

问题描述

C 代码

#include <stdio.h>

int fibonacci(int);

int main()

{

    int x = fibonacci(3);

    printf("Fibonacci is : %d",x);

    return 0;
}

组装

section .text

global fibonacci

fibonacci:

    push ebp;
    mov ebp,esp;
    ; initialize
    mov dword [prev],0x00000000;
    mov dword [cur],0x00000001;
    mov byte [it],0x01; 
    mov eax,dword [ebp + 8]; // n = 3
    mov byte [n],al;

getfib:

    xor edx,edx;
    mov dl,byte [n];
    cmp byte [it],dl;
    jg loopend; 
    mov eax,dword [prev];
    add eax,dword [cur];
    mov ebx,dword [cur];
    mov dword [prev],ebx;
    mov dword [cur],eax;
    inc byte [it];
    jmp getfib;

loopend:

    mov eax,dword [cur];

    pop ebp;

    ret;

section .bss

    it resb 1

    prev resd 1

    cur resd 1

    n resb 1

我试图在 C 代码和调试中运行这个汇编函数,我看到 C 代码中变量 x 中的值是正确的,但是当我使用 printf 函数时出现了一些错误

需要帮助

编译命令:

nasm -f elf32 asmcode.asm -o a.o

gcc -ggdb -no-pie -m32 a.o ccode.c -o a.out

如果图片看起来模糊,请单击下面的图片

下面是 printf 执行前的调试

下面是 printf 执行后

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)