Arm 拆卸器臂的说明。[手臂/拇指模式]

Arm 拆卸器臂的说明。[手臂/拇指模式],arm,disassembly,Arm,Disassembly,我想问您如何确定指令编码在哪个ISA(ARM/Thumb/Thumb-2)中 首先,我尝试按照(第4.5.5节)进行操作 但是,当我使用readelf-s./arm\u binary,并且arm\u binary是在发布模式下构建的时,二进制文件中似乎没有.symtab。无论如何,我不明白如何使用这个命令来查找指令的类型 其次,我知道另一种区分方法是查看ARM/Thumb指令的PC地址。如果它是偶数,那么它是一个拇指指令,如果不是-那么手臂。但是我如何在不将文件加载到内存的情况下执行此操作?当我

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

首先,我尝试按照(第4.5.5节)进行操作

但是,当我使用
readelf-s./arm\u binary
,并且
arm\u binary
是在发布模式下构建的时,二进制文件中似乎没有
.symtab
。无论如何,我不明白如何使用这个命令来查找指令的类型

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

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

那么,识别ISA进行拆卸的正确方法是什么


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

我认为,如果不检查您描述的说明,就无法以混合模式二进制进行识别

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

readelf -h ./arm_binary
以及检查入口点是偶数还是奇数

然而,我要做的是简单地从两个方面分解它,然后看看什么看起来是正确的。只要在函数(或任何4字节边界)的开始处开始反汇编,就可以正常工作。当在错误的ISA中反汇编时,大多数代码都会产生无意义的结果。

可能重复的