因此,这里是一个字节序列45 A6 F7中vtable。
它指向位于 的子程序F7A644。
IDA 表示为“function_symbol +1 ”
为什么加一呢?
为什么是它45 A6 F7而不是44 A6 F7?
为什么 vtable 函数指针有 +1?
逆向工程
艾达
拆卸
手臂
虚表
2021-06-29 07:36:12
1个回答
如果是可能使用 THUMB 编码的 ARM 架构,则可能是以下问题的结果:
如果我没记错的话,可以使用类似于BLX间接跳转的汇编命令来执行对虚拟函数的调用,这允许在 ARM 和 THUMB 编码之间切换。在这种情况下,这+ 1意味着跳转的目标是用 THUMB 编码的。
有关此机制的更多信息,请参见此处。
所有这些指令都会导致一个分支到标签或包含在 Rm 中的地址。此外:
- BL 和 BLX 指令将下一条指令的地址复制到 lr(r14,链接寄存器)中。
- BX 和 BLX 指令可以将处理器状态从 ARM 更改为 Thumb,或从 Thumb 更改为 ARM。BLX 标签总是改变状态。BX Rm 和 BLX Rm 从 Rm 的位 [0] 导出目标状态:
- 如果 Rm 的位 [0] 为 0,则处理器更改为或保持在 ARM 状态
- 如果 Rm 的位 [0] 为 1,则处理器更改为或保持在 Thumb 状态。
其它你可能感兴趣的问题