繁体   English   中英

指令反汇编器ARM。 [ARM /拇指模式]

[英]Instruction disassembler ARM. [ARM/Thumb mode]

我想问你如何确定指令在哪个ISA(ARM / Thumb / Thumb-2)中编码?

首先,我尝试按照此处说明进行操作 (第4.5.5节)。

但是,当我使用readelf -s ./arm_binaryarm_binary是在发行模式下.symtab时,二进制文件中似乎没有.symtab 而且无论如何,我不明白如何使用此命令查找说明的类型。

其次,我知道区分的另一种方法是查看ARM / Thumb指令的PC地址。 如果是偶数,则为Thumb指令;如果不是,则为ARM。 但是,如何在不将文件加载到内存的情况下执行此操作? 当我解析文件的各个部分并找到执行部分时,我所拥有的只是文件中的开始(偏移)位置,并且文件偏移始终为偶数,并且由于我们的大小指令相等,因此它将始终为偶数到2或4 ...

最后,检查的最后一种方法是检测BX Rm ,从Rm提取值,然后检查Rm中的地址是否为偶数。 但是,这可能很困难,因为为此,我需要模拟整个程序。

那么,识别要拆卸的ISA的正确方法是什么?

感谢您的关注,希望您能对我有所帮助。

我认为,如果不检查您所描述的说明,就不可能以混合模式二进制文件进行讲述。

如果整个文件是一个或另一个ISA,则可以通过运行以下命令确定入口点的ISA:

readelf -h ./arm_binary

并检查入口点是偶数还是奇数。

但是,我要做的就是简单地将其分解为两种方式,然后看一下看起来是否正确。 只要您在函数的开头(或任何4个字节的边界)开始反汇编,那么它将正常工作。 当在错误的ISA中反汇编时,大多数代码都会产生废话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM