【问题标题】:How to distinguish thumb instruction from arm instruction in an elf file?如何区分elf文件中的拇指指令和手臂指令?
【发布时间】:2015-07-22 06:19:26
【问题描述】:

如标题所示,我想反汇编elf文件,但是遇到了一个问题,我不知道哪个指令是arm指令,哪个是thumb指令。因为 arm 指令是 32 位的,而 thumb 指令是 16 位的,所以反汇编方式是不同的。那么如何从 hex 指令中检测到 thumb 指令呢?

【问题讨论】:

  • Script/Tool predicate for ARM ELF compiled for Thumb OR Arm 的可能副本。就像在那个问题中一样,总有人可以想出一些在两种模式下运行的病态代码。任何遵循 EABI 并使用标准编译器的东西都很容易确定。我只是拆卸两种方式,几分钟后,很容易看出哪个是正确的。还有,作者的意图和ROP exploitablity不同。
  • 它是否由操作系统托管?它是一些引导加载程序代码吗?你是逆向工程、制作工具等吗?问问题的方式太笼统了,任何人都无法给出有意义的答案。但是,可能 重复适用于 Linux ELF 文件(可能也适用于 BSD/Apple)。如果你想要一个漏洞利用,原始代码的意图并不重要。如果你想知道代码在做什么,那就另当别论了。

标签: arm elf disassembly thumb


【解决方案1】:

在ELF文件中,其实有一个很直接的方法——看符号表中的函数地址即可。与互通分支的目标地址非常相似,符号地址的低位表示相关指令集 - 对 ARM 函数清除,对 Thumb 函数设置(参见the ARM ELF ABI 的第 4.5.3 节)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多