【问题标题】:Getting instruction given address pointed by the instruction pointer获取指令指针指向的给定地址
【发布时间】:2012-01-29 08:51:44
【问题描述】:

我正在处理这段代码,在给定指令指针的情况下,我需要让程序执行指令。现在假设我有一种机制可以为我提供指令地址,是否可以从中获取操作码(在 IA32 指令集上)?

【问题讨论】:

  • 获取处理器文档并在操作码表中查找。或者找一个开源反汇编程序。
  • @DavidHeffernan 好吧,问题是,给定指令指针,我不确定如何获取操作码,因为每个操作码的字节数可能会有所不同(如果错了,请纠正我,我不太确定)..
  • 在处理器文档中都有解释。每条指令都进行了非常全面的描述,包括指令大小。到目前为止,使用现成的 disasm 代码更容易。
  • @sanz:这是一项艰巨的任务。正如您注意到 IA32 上的指令长度因指令而异。此外,还有一些带有一些新指令的 x86_64 架构,一些被删除的指令等等。你的上帝 SSE、3Dnows、FPU 指令。更好地使用现有的反汇编程序。

标签: c assembly x86


【解决方案1】:

你需要一个内存反汇编器,例如BeaEngineDiStorm,这些可以传递一个内存地址来读取,只要确保地址是可读的。如果您知道函数的字节长度,那么使用这些站点上也提供的 Run-Length-Dissassemblers 会更好。

【讨论】:

    【解决方案2】:

    如果您正在寻找硬件支持的帮助,那么它不是这样工作的。这需要在软件中完成。您的代码需要一个操作码和指令表,并且只需要执行查找即可。

    您所描述的称为反汇编。有许多开源反汇编器,如果您可以使用其中之一,它会使您的任务变得非常简单。看这里:http://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多