MuFen 发表于 2019-3-13 22:35

解决一个问题:如何编译源代码的汇编代码和机器码?

本帖最后由 MuFen 于 2019-3-15 13:32 编辑

1. 如何编译源代码?
1)下载编译器并安装 以嵌入式AVR处理器为例,需先下载AVR处理器对应的编译器WinAVR
下载地址: ---附件一---

2)创建源代码

创建一个源代码,例如main.c

3)进入DOS系统,调用WinAVR工具编译源代码,输入下述指令:

avr-gcc.exe -Wall -O –g -o main main.c


1. avr-gcc.exe为安装的WinAVR编译器编译工具

2. -Wall 表示启用编译警告提醒

3. -O 表示启用编译优化功能

4. -g 表示启用调试功能

5. -o main表示命名编译后产生的目标文件名为main

6. main.c 指定被编译的源文件


2. 提取源代码的汇编程序与机器码

1)汇编程序与机器码提取工具GNU Binutils工具


参考网址:
https://sourceware.org/binutils/docs-2.29/binutils/index.html

具备的功能:


1. 从编译产生的目标文件中提取出源代码对应的汇编代码:objdump


2. 从编译产生的目标文件中提取出源代码对应的机器码:objdump


3. 对目标文件的格式进行转换:objcopy


4. 显示目标文件的格式信息:readelf

5. 等等

2)采用Binutils工具集中objdump获取源代码的汇编程序与机器码



在安装的编译器WinAVR中,已经附带了binutils工具,输入下述指令:

avr-objdump.exe –S main > main_S.txt

获取源代码的汇编程序与机器码。

其中:

1. avr-objdump.exe表示Binutils工具集中目标文件分析工具

2. -S main表示提取出目标文件main的汇编程序与机器码


3. > main_S.txt表示将提取出的信息存储到文件main_S.txt中

3. 查看汇编程序与机器码



查看通过objdump导出的main_S.txt文件,其中含有main.c源代码对应的汇编程序与机器码。

其中:

1. 最左侧5e~6a为指令地址

2. 地址之后为指令机器码

3. 机器码之后为对应的汇编程序

4. 汇编指令之后为注释


下一篇文章传送门:汇编小白---解决一些常用汇编指令问题---简单通俗易懂


muzili520 发表于 2019-3-13 22:46

解决了我的大问题

陈世界 发表于 2019-3-14 00:11

多些交流,一同进步

MikuMaxZ 发表于 2019-3-14 07:43

学到了。感谢

q1070697070 发表于 2019-3-15 13:20

谢谢你的分享1

StevenYwh 发表于 2020-11-18 19:40

原来如此
页: [1]
查看完整版本: 解决一个问题:如何编译源代码的汇编代码和机器码?