;*************foo.asm*********************
extern choose ;
[section .data] ;data is here
num1st dd 3 ;data definition
num2nd dd 4
[section .text] ;code is here
global _start ;export _start function
global myprint ;export myprint for print by bar.c
_start:
push dword [num2nd]
push dword [num1st]
call choose ;call choose function in bar.c
add esp, 8
mov ebx,0
mov eax,1
int 0x80 ;soft irq
;void myprint()
myprint:
mov edx,[esp+8] ;len
mov ecx,[esp+4] ;msg
mov ebx,1
mov eax,4
int 0x80;
ret
;*************foo.asm end*********************
//bar.c
void myprint(char* msg,int len);
int choose(int a, int b)
{
if(a>=b)
myprint("the 1st one\n",13);
else
myprint("the 2nd one\n",13);
return 0;
}
//bar.c end
使用下列命令就可以实现相互调用的验证。
;nasm -f elf foo.asm -o foo.o
;gcc -c bar.c -o bar.o
;ld -s foobar.o bar.o -o foobar
;./foobar
具体细节可以从代码中领会。