回溯偏移功能

逆向工程 艾达 拆卸 抵消
2021-06-16 06:07:26

我有 2 个 armv7-m (Thumb) 分支指令(十六进制),它们调用一个函数。你能告诉我如何计算这个函数的偏移量,以便我可以在其他位置调用它。

谢谢!

偏移量 0020922A - 十六进制:07 F6 6C FE

偏移量 0020941A - 十六进制:07 F6 74 FD

我已经想出了如何计算它:

  • 所以我们有 07 F6 6C FE(arm - little endian) -> F6 07 | 铁 6C
  • F6 07 | FE 6C = 1111 0110 0000 0111 | 1111 1110 0110 1100
  • 看5.19(ece.uwaterloo.ca/~ece222/ARM/ARM7-TDMI-manual-pt3.pdf)我们会发现如何获取操作码:
    • 上半年 F6 07 = 1111 0110 0000 0111 = F000 + 607
    • 下半年FE 6C = 1111 1110 0110 1100 = F800 + 66C
    • 66C << 1 = 110011011000 = CD8 => 偏移量 = 607CD8
  • 这是正确的吗?所以我们测试它:Offset 0020941A - Hex: 07 F6 74 FD
  • 在这种情况下,我们的偏移量为:607CD8 - (0020941A - 0020922A) = 607AE8
  • 新分支指令 = F000 + 607 | F800 + (AE8 >> 1)
  • AE8 = 101011101000 -> 10101110100 = 574 => F6 07 FD 74 :D/
0个回答
没有发现任何回复~