【问题标题】:Capstone switching from ARM to THUMB dynamicallyCapstone 动态从 ARM 切换到 THUMB
【发布时间】:2020-02-24 11:22:37
【问题描述】:

我正在尝试编写一个简单的脚本来反汇编 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 中完全反汇编。

提前感谢您的帮助

【问题讨论】:

  • 可变长度指令集如 arm/thumb arm/thumb/thumb2 需要按执行顺序而非线性顺序反汇编。所以你需要从一个好的切入点开始。问题是您必须进行某种程度的模拟才能使其与这些平台一起使用。现在 thumb/thumb2 在执行顺序上很容易,arm vs thumb 无论如何都不是。现在我认为 .elf 文件中有一些东西可以告诉反汇编程序什么块是什么,因为他们能够弄清楚。除此之外,您最好的机会是部分模拟器并按执行顺序进行。
  • 与 x86 和其他可变长度指令集一样,您只能希望其中一些正确(即使 gnu 也在 x86 上苦苦挣扎)
  • 当你在邮件列表中询问这个问题时他们说了什么?
  • @old_timer 我没有在邮件列表中询问..
  • 邮件列表是联系我们的最佳方式。这是进行长时间对话的地方。

标签: python arm capstone


【解决方案1】:

disasm 在一次调用中反汇编多条指令,所以当你改变模式时已经太迟了。

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

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

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多