将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 $