首先是汇编程序,还是前面的例子,只是加了2行程序:
extern main ;说明这个函数从外面程序获得
[section .data]
charact db 'a'
[section .text]
global _start
_start:
MOV ECX,charact
PUSH ECX
CALL usestack
POP ECX
MOV EDX,1
MOV EBX,1
MOV EAX,4
INT 0X80
call main ;在这里调用函数
MOV EAX,1
MOV EBX,0
INT 0X80
usestack:
MOV EBP, ESP
PUSHAD
MOV EBP,DWORD[EBP+4]
INC WORD[EBP]
POPAD
RET
下面是c语言程序:
#include <stdio.h>
int main(void)
{
printf("hello/n");
return 0;
}
将汇编语言编译成.o文件:
nasm -f elf stack.asm 生成stack.o
将c语言编译成.o文件:
gcc -c hello.c ,生成hello.o
然后用以下命令连接:
ld -dynamic-linker /lib/ld-linux.so.2 -lc -o myapp stack.o hello.o
得到可执行程序myapp,用./myapp执行即可,输出为bhello。