[英]Instruction disassembler ARM. [ARM/Thumb mode]
我想问你如何确定指令在哪个ISA(ARM / Thumb / Thumb-2)中编码?
但是,当我使用readelf -s ./arm_binary
且arm_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.