我正在编写一个 ARMv7 反汇编程序。 ARM 引用手册中清楚地描述了在 ARM 和 Thumb 模式之间切换的方法,但是您如何知道程序启动在什么模式下?
我使用的 Xcode 默认编译为 Thumb,所以我知道我自己的所有程序都将以 Thumb 启动,除非我强制编译为 ARM 模式。但是,我希望能够获取任意 mach-o 可执行文件并找出代码开头的指令集模式。
mach-o header 中是否有指定入口点的指令集?
最佳答案
处理器通过打开程序计数器的最低有效位来知道它处于 Thumb 模式,从而导致程序计数器具有奇数值。为了取指令,该位被忽略,您可以通过切换该位在 ARM 和 Thumb 模式之间切换。
当您创建 ARM 二进制文件时,链接器将根据该符号是指向 ARM 还是 Thumb 代码来设置符号地址的最低有效位,以便处理器在程序启动时自动选择正确的模式。你不需要关心这个。
关于assembly - 如何知道程序入口点是ARM还是Thumb模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32278382/