跳转至

确定补丁大小

图 2-3 用 OllyDbg 放置补丁

有几种方法可以确定你的补丁是否会与原始代码大小不同。例如,在图 2-3 中,你可以看到 0x7790ED2E 处的命令从 SHR AL, 6 变成了 SHR AL, 7。如果查看命令左侧的字节,你会看到 3 个字节代表命令的内存。这意味着我们的新命令必须是 3 个字节,如果小于 3 个字节,则要用 NOP 填充。此外,这些字节排列成两列。第一列包含 0xC0 和 0x08,代表命令 SHR 和第一个操作数 AL。第二列包含 0x06,代表原始操作数。因为第二列显示一个单字节,任何替换操作数也必须是 1 个字节(在 0x00 和 0xFF 之间)。如果这一列显示的是 0x00000006,替换操作数就可以长达 4 个字节。

典型的代码补丁要么全部使用 NOP 完全移除一个命令(留空框,让它用 NOP 填满整个命令),要么只替换单个操作数,所以这种检查补丁大小的方法几乎总是有效的。