ARM指令机器码学习

ARM指令机器码学习 

2016-07-12 18:59

以前,死活看不懂这个DLL文件的16进制(其实是二进制,为了好看,以16进制ASCII码显示),对一些高手使用IDA反汇编流口水,今天终于轮到俺上场了。

现在来看看这个指令通常的编码格式

——————————————————————————————————————————————————————

这个貌似和英文原版不一样,现在来看看 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完工。

———————————————————————

这个 对驱动开发人员非常有帮助,有时候画错电路图,如果不能反汇编修改代码就会无计可施了,如果可以就可以轻松为企业节省时间和成本。

其实每个指令的机器码都有差异,不过有规律,查阅手册即可。我准备过段时间把eboot反汇编,把以前一些编译疑惑全部解决。

参考书籍:ARM System Developer's Guide: Designing and Optimizing System Software

——ARM System Developer's Guide: Designing and Optimizing System Software——ARM 开发:软件设计与优化的英文原版——我个人感觉这是国内翻译ARM书籍最好的一本之一,比杜XX的ARM体系结构与编程好千倍。 本书虽然说软件设计与优化,但是讲的硬件也很多,比如MMU和cache等,讲的精彩纷呈

下载地址:http://download.csdn.net/source/904273

ARM920T Technical Reference Manual——不多说了,想了解2440等的bootloader的人一定要看这个东西了,一些协处理器指令讲的很详细

下载地址:http://download.csdn.net/source/903240

ARM Architecture Reference Manual(2nd Edition) ——比较有价值的英文ARM书籍

下载地址http://download.csdn.net/source/901433

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ARM汇编指令转换为机器码是将人类可读的汇编指令翻译成机器可执行的二进制码的过程。由于机器码是计算机硬件能够直接理解的指令形式,所以在执行指令时,计算机需要将汇编指令转换为机器码。下面是一种简单的方法将ARM汇编指令转换为机器码。 首先,需要根据ARM指令的格式和规范理解每个指令的含义和操作码。ARM指令由32位组成,其中包含操作码、操作数和其他参数。 其次,根据具体指令的格式,将每个部分转换为对应的二进制表示形式。例如,操作码通常表示为特定的二进制位模式。 然后,根据指令的不同寻找对应的编码方式。不同的指令有不同的编码方式,例如立即数、寄存器和内存地址等等。根据具体的指令要求和参数,转换相应的部分。 最后,将所有部分组合成一个32位的二进制序列,这就是转换后的机器码。转换后的机器码可以被计算机硬件直接识别和执行。 需要注意的是,ARM汇编指令转换为机器码的过程需要具备一定的知识和经验。对于复杂的指令或有特殊要求的指令,可能需要查阅相关的ARM体系结构手册或其他资料来获得准确的转换方式。此外,在转换过程中还应该注意指令的字节顺序(即大端序或小端序)以及特殊的对齐要求。 总之,将ARM汇编指令转换为机器码是一项需要仔细思考和操作的任务。掌握适当的知识和技巧可以帮助我们完成这个过程,以便更好地理解和使用ARM指令集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值