首先是汇编程序,还是前面的例子,只是加了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。
博客展示了汇编程序和C语言程序的代码示例,汇编程序添加了调用函数的代码。接着介绍了将汇编语言和C语言分别编译成.o文件的命令,即nasm -f elf stack.asm和gcc -c hello.c,最后说明了连接两个.o文件生成可执行程序的命令及执行结果。
1083

被折叠的 条评论
为什么被折叠?



