我试图在汇编程序中调用C函数。这是我的代码:
C:

int multiply(int what)
{
    return what * 2;
}

阿斯姆:
extern multiply

start:
    mov eax, 10
    push eax
    call multiply

    jmp $

;empty
times 510-($-$$) db 0
dw 0xAA55

我正在用gcc(MinGW)把C代码编译成elf,用NASM把ASM代码编译成ASM。我编译它没有任何问题,但当我尝试使用此代码(用于创建.bin文件)时:
gcc -o test.bin work.o test.o

我得到这个错误:
有人知道如何从ASM代码调用C函数,编译它并将其链接到工作的.bin文件吗?请帮忙。

最佳答案

尝试添加“\u”进行乘法运算:

extern _multiply

在这个简单的例子中对我有效:
global  _main

extern  _printf

section .data

text    db      "291 is the best!", 10, 0
strformat db    "%s", 0

section .code

_main
    push    dword text
    push    dword strformat
    call    _printf
    add     esp, 8
    ret

关于c - 未定义的乘法引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11344006/

10-13 04:17