汇编和 c同步使用
来源:互联网 发布:商城商品数据库设计 编辑:程序博客网 时间:2024/04/27 11:11
一共有三个文件 makefile foo.asm bar.c
函数调用遵循的是c调用约定,后面的参数先入栈,并由调用者清理堆栈
makefile
-------------------
.PHONY: all clean
all: foobar
foobar: foo.o bar.o
ld -s -o foobar foo.o bar.o
foo.o: foo.asm
nasm -f elf -o foo.o foo.asm
bar.o: bar.c
gcc -c -o bar.o bar.c
clean:
rm -f bar.o foo.o foobar
foo.asm
-------------------
; 编译链接方法
; (ld 的‘-s’选项意为“strip all”)
;
; [root@XXX XXX]# nasm -f elf foo.asm -o foo.o
; [root@XXX XXX]# gcc -c bar.c -o bar.o
; [root@XXX XXX]# ld -s hello.o bar.o -o foobar
; [root@XXX XXX]# ./foobar
; the 2nd one
; [root@XXX XXX]#
extern choose ; int choose(int a, int b);
[section .data] ; 数据在此
num1st dd 3
num2nd dd 4
[section .text] ; 代码在此
global _start ; 我们必须导出 _start 这个入口,以便让链接器识别。
global myprint ; 导出这个函数为了让 bar.c 使用
_start:
push num2nd ; ┓
push num1st ; ┃
call choose ; ┣ choose(num1st, num2nd);
add esp, 4 ; ┛
mov ebx, 0
mov eax, 1 ; sys_exit
int 0x80 ; 系统调用
; void myprint(char* msg, int len)
myprint:
mov edx, [esp + 8] ; len
mov ecx, [esp + 4] ; msg
mov ebx, 1
mov eax, 4 ; sys_write
int 0x80 ; 系统调用
ret
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;
}
- 汇编和 c同步使用
- 汇编和C同步使用(Linux下编译ELF)
- 使用C汇编
- C和汇编
- 汇编和C语言
- C 和 ARM 汇编
- 使用C和汇编混合实现strcpy(欢迎扔砖)
- 使用Visual Studio2005进行C和汇编的混合编程
- C 关键字 register 和嵌入式汇编联合使用的讨论
- 学习笔记--内核中C语言和汇编的使用
- keil里同时使用C和汇编的方法
- C和汇编混合编程
- 汇编和c混合编程
- 汇编和C相互调用
- 驱动汇编和c混用
- C和汇编混合编程
- c和汇编混合编程
- C和汇编中的注释
- 处理CoreAVC Professional Edition 错误的方法
- 地震灾区IT市场遭受损失
- 学习“系统程序员成长计划-序”
- 电子商务时代邮政不会老去
- DOC命令备忘(网上乱拉)
- 汇编和 c同步使用
- 动漫产业被“熊猫”踢中软肋
- oh,ye~~ah~~~~~,our Lua GUI engine is implemented very well!!!
- 对ATX架构散热的增强考虑
- Linux太自由了,也太不强大了
- oracle中的sql语句,对数据库的完全操作
- 多方通话从预约走向自助
- 反垃圾技术也会有误判与漏报
- 扶正神码 CA携分销模式卷土重来