如何在elf文件中区分thumb指令和arm指令?

如何在elf文件中区分thumb指令和arm指令?,arm,elf,disassembly,thumb,Arm,Elf,Disassembly,Thumb,正如标题所示,我想反汇编elf文件,但遇到了一个问题,我不知道哪条指令是arm指令,哪条指令是thumb指令。因为arm指令是32位的,而thumb指令是16位的,所以反汇编的方式是不同的。那么如何从十六进制指令中检测thumb指令呢 在ELF文件中,实际上有一个简单的方法-只需查看符号表中的函数地址即可。与互通分支的目标地址非常相似,符号地址的底部位表示相关的指令集-清除ARM功能,设置Thumb功能(参见的第4.5.3节)。的可能重复。在这个问题上,总有人能想出一些在两种模式下运行的病态代码

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

在ELF文件中,实际上有一个简单的方法-只需查看符号表中的函数地址即可。与互通分支的目标地址非常相似,符号地址的底部位表示相关的指令集-清除ARM功能,设置Thumb功能(参见的第4.5.3节)。

的可能重复。在这个问题上,总有人能想出一些在两种模式下运行的病态代码。遵循EABI并使用标准编译器的任何内容都很容易确定。我只是用两种方法拆卸,几分钟后,很容易看出哪个是正确的。此外,作者和用户的意图不同。它是否由操作系统托管?这是一些引导加载程序代码吗?你是否在进行逆向工程、制造工具等。问这个问题的方式太普通了,任何人都无法给出有意义的答案。然而,可能的副本适用于Linux ELF文件(可能还有BSD/Apple)。如果您想要利用漏洞,原始代码的意图并不重要。如果您想知道代码在做什么,那么这是另一个问题。