【问题标题】:Scanning for 'call' instruction without a disassembler?在没有反汇编程序的情况下扫描“调用”指令?
【发布时间】:2016-08-17 03:33:27
【问题描述】:

我正在为 Windows X64 中的文本编辑器编写调试器。我实现了断点和跨步/跨步。我被困在步进中,因为我基本上需要获取当前行的指令地址(我通过 PDB 文件和 DbgHelp 获得)和下一行,看看这些地址之间是否有“调用”指令, 如果是,我们就介入,否则就跨过。

我想知道是否有办法通过 DbgHelp/PDB 获取这些信息(无需编写或使用反汇编程序)?或者也许利用指令的某些字节顺序,也许“调用”是唯一的,它的字节排序只有一种方式,所以我可以逐字节读取,看看它们是否与“调用”匹配? (这样我就不必全部或什至部分disasm)

想法?任何帮助将不胜感激

【问题讨论】:

    标签: c windows debugging pdb debug-symbols


    【解决方案1】:

    很遗憾,没有。

    在 x86_64 代码中,callq 最常见的操作码是 e8,但无法区分 e8 意思是 callqe8 在另一个上下文中(例如,作为常量的一部分)无需完全反汇编二进制文件以找出每条指令的开始位置。请记住,x86 使用可变长度指令,因此指令从哪里开始并不总是很明显。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      相关资源
      最近更新 更多