如何将 x64 linux asm 和 c 链接在一起?

时间:2021-01-04 15:18:22

标签: c assembly gcc 64-bit nasm

如标题所示,我无法将我的 x64 linux asm 文件与 c 文件链接起来。 到目前为止,我拥有的是 main.cmain.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);

0 个答案:

没有答案