assembly - 如何知道程序入口点是ARM还是Thumb模式

标签 assembly arm disassembly mach-o thumb

我正在编写一个 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/

相关文章:

c - GDB - 显示地址

reverse-engineering - 如何在 IDA Pro 中设置数组元素的大小?

c - 为什么这段代码可以从返回地址中得到函数地址呢?

c - 为什么/arch/x86/boot/header.S 在汇编中?

arm - HAL_GPIO_EXTI_Callback() 中的上升沿和下降沿触发

c - 为什么这是返回指针的偏移量? "smashing the stack"

assembly - 正确使用CPU寄存器——调度概念

c++ - 方法调用之前的 le​​a 指令是做什么的?

c - 没有数据部分的 ARM 程序集中的 Hello World

使用 Lauterbach (Trace32) 进行调试