我正在尝试在汇编程序中调用C函数。这是我的代码: C:
int multiply(int what)
{
return what * 2;
}
ASM:
extern multiply
start:
mov eax, 10
push eax
call multiply
jmp $
;empty
times 510-($-$$) db 0
dw 0xAA55
我正在通过gcc(MinGW)和NASM的ASM代码将C代码编译为elf。我正在编译它没有任何问题,但当我尝试使用此代码(用于创建.bin文件)时:
gcc -o test.bin work.o test.o
我收到此错误:
有没有人知道如何从ASM代码调用C函数,编译它并将其链接到工作.bin文件?请帮忙。
答案 0 :(得分:3)
尝试将'_'添加到乘法:
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
答案 1 :(得分:1)
在.asm文件中尝试“全局乘法”而不是“extern multiply”。您不应该需要ELF的下划线(我不认为),但是您可以通过在Nasm的命令行中添加“--prefix _”来让Nasm自动将下划线添加到任何“extern”或“global”。 / p>
编辑:我接受了,“extern”是正确的。你好像没有“主力”。尝试添加“--nartartfiles” (可能只有一个连字符)到gcc的命令行。
最佳,
谢