在没有反汇编程序的情况下扫描 'call' 指令?
Scanning for 'call' instruction without a disassembler?
我正在为 Windows X64 中的文本编辑器编写调试器。我实现了断点和 step-over/step-out。我卡在了 step-in 因为我基本上需要在当前行(我通过 PDB 文件和 DbgHelp 获得)和下一行获取指令的地址,看看是否有 'call' 指令那些地址,如果是这样我们就介入,否则就跳过。
我想知道是否有办法通过 DbgHelp/PDB 获取此信息(无需编写或使用反汇编程序)?或者可能利用指令的某些字节顺序,也许 'call' 是唯一的,并且只有一种字节排序方式,所以我可以逐字节读取并查看它们是否与 'call' 匹配? (那样我就不必完全或什至部分反对)
想法?任何帮助将不胜感激
很遗憾,没有。
x86_64 代码中 callq
最常见的操作码是 e8
,但是无法区分 e8
意思是 callq
和 e8
在另一个上下文中(例如,作为常量的一部分)而不完全反汇编二进制文件以找出每条指令的开始位置。请记住,x86 使用可变长度指令,因此指令开始的位置并不总是很明显。
我正在为 Windows X64 中的文本编辑器编写调试器。我实现了断点和 step-over/step-out。我卡在了 step-in 因为我基本上需要在当前行(我通过 PDB 文件和 DbgHelp 获得)和下一行获取指令的地址,看看是否有 'call' 指令那些地址,如果是这样我们就介入,否则就跳过。
我想知道是否有办法通过 DbgHelp/PDB 获取此信息(无需编写或使用反汇编程序)?或者可能利用指令的某些字节顺序,也许 'call' 是唯一的,并且只有一种字节排序方式,所以我可以逐字节读取并查看它们是否与 'call' 匹配? (那样我就不必完全或什至部分反对)
想法?任何帮助将不胜感激
很遗憾,没有。
x86_64 代码中 callq
最常见的操作码是 e8
,但是无法区分 e8
意思是 callq
和 e8
在另一个上下文中(例如,作为常量的一部分)而不完全反汇编二进制文件以找出每条指令的开始位置。请记住,x86 使用可变长度指令,因此指令开始的位置并不总是很明显。