ARM指令机器码学习
时间:11-09
来源:互联网
点击:
以前,死活看不懂这个DLL文件的16进制(其实是二进制,为了好看,以16进制ASCII码显示),对一些高手使用IDA反汇编流口水,今天终于轮到俺上场了。
现在来看看这个指令通常的编码格式
——————————————————————————————————————————————————————
这个貌似和英文原版不一样,现在来看看ARM Architecture Reference Manual里面的格式
——————————————————————————————————————————————————
还是以这个为准安全点。现在看看这个最高四位的con到底是怎么决定的。
————————————————————————————————————————————————
————————————————————————————————————————————————————
上面这些条件都是可选的,ARM都有固定的指令。下面看看无条件指令。
——————在ARMv4架构中任何带条件域0b1111的都是不可预测的。
看了那么多,现在来举个例子吧。
——————————————以branch指令为例子——————————————
引用驱动调试助手作者的成果,并解释验证
———————————————————
想一想,如果让程序跳过检测OS,是不是就可以正常运行呢。满怀着希望,用IDA反汇编了这个程序,并找到了对应的函数调用。
显而易见,0x000182b4处是有条件的调用,如果改成绝对调用loc_0_182D0,按理就不会出现那个提示框了,修改方法就是将BEQ改为B。
用UltraEdit将上面的0A改为EA,即将BEQ改成B,再拷贝到设备上面去,果然可以运行
——————————————————————————————————————————————————————
现在我们解释这个B和BEQ机器码指令
这个本来这BEQ,这个con由EQ决定,按照上面的知识,应该是0b0000,所以高八位为0x0A,现在改成B——绝对跳转,这样con就变成了0b1110,所以0xEA 就是由此而来。OK完工。
———————————————————————
这个
现在来看看这个指令通常的编码格式
——————————————————————————————————————————————————————
这个貌似和英文原版不一样,现在来看看ARM Architecture Reference Manual里面的格式
——————————————————————————————————————————————————
还是以这个为准安全点。现在看看这个最高四位的con到底是怎么决定的。
————————————————————————————————————————————————
————————————————————————————————————————————————————
上面这些条件都是可选的,ARM都有固定的指令。下面看看无条件指令。
——————在ARMv4架构中任何带条件域0b1111的都是不可预测的。
看了那么多,现在来举个例子吧。
——————————————以branch指令为例子——————————————
引用驱动调试助手作者的成果,并解释验证
———————————————————
Foxit Reader V1.1 for WinCE6.0
今天终于整理清了PXA270上的WinCE6.0,为了方便给客户演示WinCE6.0的强大,定制了一个增强型的操作系统。但WinCE6.0中已经不支持PDF等阅读器了。于是从网站上找了一个PPC版的Foxit Reader,把它放到WinCE6.0的设备上面运行,竟然提示OS不支持,只能在PPC上面跑。看到这个提示有些失望,但也有一丝希望。这个提示似乎是Foxit Reader运行时的提示框,与一般的“不是有效的Windows CE应用程序”是不一样的。既然这样,那说明程序还是运行起来了,只是检测OS时出错,所以才会出现如下图所示的提示。想一想,如果让程序跳过检测OS,是不是就可以正常运行呢。满怀着希望,用IDA反汇编了这个程序,并找到了对应的函数调用。
显而易见,0x000182b4处是有条件的调用,如果改成绝对调用loc_0_182D0,按理就不会出现那个提示框了,修改方法就是将BEQ改为B。
用UltraEdit将上面的0A改为EA,即将BEQ改成B,再拷贝到设备上面去,果然可以运行
——————————————————————————————————————————————————————
现在我们解释这个B和BEQ机器码指令
这个本来这BEQ,这个con由EQ决定,按照上面的知识,应该是0b0000,所以高八位为0x0A,现在改成B——绝对跳转,这样con就变成了0b1110,所以0xEA 就是由此而来。OK完工。
———————————————————————
这个
ARM指令机器 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)