汇编调用C库函数
-
Code
;; 可执行文件名: helloworld.asm ;; 程序版本: 0.01 ;; 创建日期: 2019/1/02 ;; 最后修改日期: 2019/1/02 ;; 作者: ieeqc ;; 描述: ;; - 汇编调用c函数实现helloworld程序 ;; ;; 编译指令 ;; - nasm -f elf -g -F stabs puts_hello.asm -o puts_hello.o ;; - gcc -m32 puts_hello.o -o hello SECTION .data ; 包含已初始化数据段 EatMsg: db "Hello World!", 0 SECTION .bss ; 包含未初始化数据段 SECTION .text ; 包含代码段 extern puts ; 说明来自glibc的puts函数 global main main: push ebp ; 为调试器建立堆栈帧 mov ebp, esp push ebx ; 保存现场 push esi push edi push EatMsg ; 压入函数参数输出信息地址到栈中 call puts ; 调用puts()函数 add esp, 4 ; 清理堆栈, 通过ESP 调用4字节 pop edi ; 恢复现场 pop esi pop ebx mov esp, ebp ; 在返回之前,销毁堆栈 pop ebp ret ; 返回
编译汇编代码
-
bash:
nasm -f elf -g -F stabs puts_hello.asm -o puts_hello.o
gcc -m32 puts_hello.o -o hello