汇编和反汇编

文章目录

一、程序处理的步骤

下面是编写 LED 程序时,它的 main.c 和 start.S的处理图:

.S 文件经过汇编之后得到机器码,机器看得懂的代码,链接之后再反汇编得到含汇编的代码,通过阅读反汇编得到最终可执行的代码,了解更深层次的内容。

二、汇编和反汇编

汇编:汇编文件转换为目标文件(里面是机器码);反汇编:可执行文件(目标文件,里面是机器码),转换成汇编文件。在上一次的点灯实验里,点击魔术棒,选择 USER 选项卡,在编译之后的空白行里输入下面代码,生成反汇编代码:

c 复制代码
fromelf  --bin  --output=led.bin  Objects\led_c.axf
fromelf  --text  -a -c  --output=led.dis  Objects\led_c.axf

然后在工程文件下找到 led.dis,用 keil 打开即可查看反汇编代码:

在 Start.S 文件里,申请栈空间的指令是一个伪指令,经过汇编之后转变成真实的指令:

在 led.dis 文件中找到 Reset_Handler,第一列的地址是链接地址,第二列是机器码,后面就是汇编代码,上面的伪指令也转变成真实的指令,将 pc, #4 地址所存的值,读到 sp 里如下图所示:

F103 板子是 Thumb-2 指令,LDR sp,[pc,#4]的机器码是 f8dfd004,里面的机器码与下图中的 Thumb-2 指令格式一一对应:

c 复制代码
f8dfd004 = 1111 1000 1101 1111 1101 0000 0000 0100

其中 sp 是 R13 寄存器,对应 Rt 的 12 ~ 15 位是 13,因此 12 ~ 15 位是 1101;0 ~ 11 位是表示一个立即数,pc + 4,正好对应 0 ~ 11 位全部加起来等于 4。

相关推荐
ThornArmor14 天前
【工具篇·番外】跨语言生态的主权回收:基于 ISA 说明书的 4-bit 双向汇编系统全线封顶
c语言·开发语言·汇编·c++·重构·架构
是星辰吖~14 天前
WIN32_线程(下)
汇编
是星辰吖~15 天前
WIN32_线程(上)
汇编
AI科技星15 天前
数术工坊 · 第四卷 橡皮泥江湖(拓扑学)【完整定稿】
c语言·开发语言·汇编·electron·概率论·拓扑学
iCxhust16 天前
C# 生成命令行程序 将hex格式烧录程序转换成bin烧录格式
开发语言·汇编·单片机·嵌入式硬件·c#·微机原理
iCxhust16 天前
C#进程管理程序
开发语言·汇编·stm32·单片机·c#·微机原理
hhcgchpspk16 天前
汇编语言传递数据和地址的误区
汇编·笔记·nasm·masm
iCxhust17 天前
MTK8088单板机制作(一)时钟电路
汇编·单片机·嵌入式硬件·微机原理·8088单板机
iCxhust17 天前
8086 汇编位测试使用方法
汇编·单片机·嵌入式硬件·微机原理·8088单板机
iCxhust17 天前
用汇编在8088单板机上创建一个进程
汇编·微机原理