2016-08-17 35 views
0

我正在为Windows X64中的文本编辑器编写一个调试器。我实现了断点和跳过/跳出。我坚持介入,因为我基本上需要获取当前行(通过PDB文件和DbgHelp获取)的指令地址和下一行,查看这些地址之间是否存在“调用”指令,如果是的话,我们介入其他步骤。在没有反汇编程序的情况下扫描“调用”指令?

我想知道是否有方法通过DbgHelp/PDB获取此信息(无需编写或使用反汇编程序)?或者可能利用指令的某些字节顺序,也许'调用'是唯一的,并且只有一种方法来对它的字节进行排序,以便我可以逐字节读取并查看它们是否与“调用”匹配? (这样我就不必做全部的甚至部分的解体)

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

回答

0

不幸的是,没有。

callq在x86_64的代码的最常见的操作码是e8,但没有办法在另一个上下文中区分一个e8一个e8含义callq(例如,作为一个恒定的部分),而不完全拆卸二进制来找出每条指令开始。请记住,x86使用可变长度指令,所以在指令启动的地方并不总是很明显。

相关问题