c语言汇编程序100例,C语言程序转汇编代码

本文介绍了如何将C语言程序转换为NASM汇编代码,通过使用gcc进行预处理并配合objconv工具,详细阐述了转换过程和参数设置。同时,还展示了一个C函数转换后的汇编代码实例,并提供了Python脚本来过滤不必要的汇编指令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学着写bootloader,由于汇编太繁杂,希望可以使用C语言完成一部分,然后转成NASM汇编代码,经过摸索,最终找到了一个解决方案,记录于此,留作参考。

核心步骤

使用gcc编译得到.o文件

这一步需要加上一些参数对编译行为进行控制。具体自行参考gcc文档。

我最终使用的命令参数为

gcc -fno-pic -fno-asynchronous-unwind-tables -m32 -O2 -s -c -o $@ $<

具体含义我也没有深入了解,`-m32`是生成32位代码,`-O2`是一种优化级别,`-fno-pic`似乎是必要,要不然每个文件最终都会生成一个额外的函数,具体原因我没有深入研究。

使用objconv程序将.o文件转换成汇编代码

objconv -fnasm $<

objconv可以将.o文件转成多种形式的汇编,具体自行查阅,上面的参数是要转成NASM代码。

还有一个问题是,这样直接转换成的汇编代码包含多个段,以及各种对齐指令,以及`enbdrXX`指令,需要自己根据需要进行删减。

到这里已经基本可以解决问题了,下面是我的需求和解决方案如下。

我的需求及实现

最终我需要的是将使用C语言完成的函数转换成汇编形式的函数,并去掉编译器相关、对齐相关的一些代码。我的Makefile如下。

all : $(subst .c,.func,$(wildcard *.c))

%.func : %.asm

./extractFunc.py $<

%.asm : %.o

./objconv -fnasm $<

%.o : %.c

gcc -fno-pic -fno-asynchronous-unwind-tables -m32 -O2 -s -c -o $@ $<

clean :

rm -rf *.asm *.o *.fu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值