英语不是我的第一语言,所以如果我的文字不太清楚,我很抱歉。
我正在尝试为 PE 二进制文件编写一个自动修补程序,它应该适用于该可执行文件的多个版本。为此,我需要找到引用特定静态字符串的指令的字节。我需要为下面以红色突出显示的 LEA 指令找到文件中的字节:
我不能简单地对“48 8D 15 C8 50 DA 00”进行模式搜索,因为操作码的最后四个字节在可执行版本之间会随着字符串地址的变化而变化。
使用十六进制编辑器在文件中查找字符串偏移量非常容易,并且将该偏移量转换为虚拟地址也非常简单,我已经开始工作了(从文件偏移量转换为 VA 正确生成了 0x140FDE580)。
问题实际上是从这个虚拟地址进入 LEA 地址操作数 (C8 50 DA 00) 的二进制操作码。既然这个地址是相对于当前指令位置的,那么除了在每条指令之间迭代,计算EIP和字符串VA之间的距离,看看当前指令是否寻址这个VA偏移量之外,还有没有更优化的搜索这条指令的方式?
提前致谢!
