将C与NASM链接

我有一个NASM文件和一个C文件。 如何从NASM文件中调用C文件中的函数? 如何从C文件中调用NASMfunction?

非常感谢DD

从C调用汇编函数:

C档案:

#include  int add(int a, int b); int main(int argc, char **argv) { printf("%d\n", add(2, 6)); return 0; } 

程序集文件:

 global add section .data section .text add: mov eax, [esp+4] ; argument 1 add eax, [esp+8] ; argument 2 ret 

编译:

 $ nasm -f elf add.asm $ gcc -Wall main.c add.o $ ./a.out 8 $ 

从汇编中调用C函数:

C档案:

 int add(int a, int b) { return a + b; } 

程序集文件:

 extern add extern printf extern exit global _start section .data format db "%d", 10, 0 section .text _start: push 6 push 2 call add ; add(2, 6) push eax push format call printf ; printf(format, eax) push 0 call exit ; exit(0) 

编译:

 $ gcc -Wall -c add.c $ nasm -f elf main.asm $ ld main.o add.o -lc -I /lib/ld-linux.so.2 $ ./a.out 8 $