汇编和C同步使用(Linux下编译ELF)

要编译一个内核,必须要想办法将C和汇编语言连接在一起。这里是一个汇编语言的一份代码: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]#
摘要由CSDN通过智能技术生成

要编译一个内核,必须要想办法将C和汇编语言连接在一起。

这里是一个汇编语言的一份代码:

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(cha
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值