为什么要反汇编

反汇编顾名思义就是汇编的逆过程,将二进制文件反汇编成汇编代码。arm-linux-objdump是交叉编译工具链里的一个工具,专门用来反汇编的,将二进制代码反汇编成汇编代码来查看。

为什么要反汇编

1.逆向破解。将可执行程序反汇编得到汇编代码,再根据汇编代码推理出整个程序的逻辑。这个不是一般人能做的,能看懂大量汇编语言写的程序都很困难了,更别说反推别人的代码逻辑。

2.调试程序时可以帮助我们理解并检测生成的可执行程序是否正常,尤其是在理解链接脚本和链接地址等概念时。

3.C语言的源代码编译链接生成的可执行文件再反汇编,可以帮助我们理解C语言和汇编语言的对应关系,有助于深入理解C语言。

反汇编文件的生成和解读

反汇编文件的生成:

上面是一个简单的Makefile,功能是把源文件.S和.c先编译成.o文件,再把.o文件链接成.elf的可执行文件。_是将反汇编成ed_。

源文件:是一个汇编文件

得到的反汇编文件:led_

解析:

1.第一行::fileformatelf32-littlearm。表明此汇编程序是由生成,程序是32的小端模式。

2.00000000_start:前面的00000000是标号的地址,_start是标号,对应的_start标号。其实标号就相当于C语言中的函数名,在C语言中也可以用函数名代表函数的首地址,在这里可以得到印证。反汇编的标号就是由汇编文件得来的,这样可以方便我们找到反汇编文件和汇编文件对应的部分。

3.整个反汇编文件分为三列,分别对应:指令地址、指令机器码、指令机器码反汇编到的指令。

我们在这里对汇编文件的前几句进行解读:

1.ldrr1,[pc,112]代表pc+70地址处的数据(112]和ldrr1,=0xE0200240实现的是同样的功能。

2.ldrr0,[pc,4096对应于汇编的movr2,4096),有的要用相对寻址的方式加载(ldrr1,[pc,#112])?这里涉及到合法立即数和非法立即数,简单来书就是数据太大,一条语句的数据部分表达不了,于是就将要加载的数据放在某个地址处,要用到的时候就去该地址处取,此时的ldr也是伪指令。

致芯科技有限公司不但可以直接破解芯片,提取芯片程序烧录代码,做到一比一复制,而且可以提供芯片程序反汇编,用以修改优化程序,另外我们还给客户提供电子产品PCB抄板,PCB设计一条龙式产品服务(PCB克隆、改板、原理图及BOM单制作、PCB生产、样机制作调试、成品加工一条龙服务型企业)。为那些专注产品市场推广的客户节省大量开发时间和开发费用,帮助客户永远在产品市场上具有领先优势,为客户创造价值。欢迎来电详询!