1

我正在尝试编写一个简单的脚本来反汇编 ARM/THUMB 字节码。从一种模式切换到另一种模式在 ARM 中很常见,因此反汇编程序能够遵循这一点非常重要。我遇到了麻烦,即使文档说它很简单(请参阅https://www.capstone-engine.org/lang_python.html#62-dynamically-change-disassemble-mode-at-run-time) . 这对我来说似乎在运行时不起作用。

这是我的测试的样子:

for i in md.disasm(CODE, 0x1000):
    print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))
    if i.mnemonic == "bx":
        md.mode = cs.CS_MODE_THUMB

请注意,它实际上确实进入了拇指模式,而不是在循环期间。因此,发生的情况是代码在 ARM 中完全反汇编,但如果我再次运行它,它将在 THUMB 中完全反汇编。

预先感谢您的帮助

4

1 回答 1

1

disasm在一次调用中反汇编多个指令,因此在您更改模式时为时已晚。

您可以一次反汇编一条指令或使用cs_disasm_iter.

参考链接:https ://www.capstone-engine.org/iteration.html

于 2020-11-27T18:51:24.097 回答