如标题所示,我无法将我的 x64 linux asm 文件与 c 文件链接起来。
到目前为止,我拥有的是 main.c
和 main.asm
。我使用 nasm 和 gcc。
//main.c
extern void write(const char *, int);
int main()
{
write("Hello, world!", 13);
return 0;
}
;main.asm
global write
global _start
extern main
section .text
_start:
call main
mov rax, 60
mov rdi, 0
syscall
write:
mov rax, 1
mov rdi, 1
syscall
ret
我尝试像这样链接它们。
nasm -f elf64 main.asm -o asm.o
gcc -c main.c -o c.o
gcc -nostdlib c.o asm.o -o main
而且我在 ./main
之后没有输出也没有任何错误。
正确的做法应该是什么?
编辑: 我忘了函数的参数是从寄存器 rdi 开始传递的,所以函数 extern 应该是。
extern void write(int, const char *, int);