OllyDbg 表达式实战¶
OllyDbg 中的表达式使用与大多数编程语言相似的语法;你甚至可以组合多个表达式并在一个表达式中嵌套另一个。游戏黑客(实际上,所有黑客)通常用它们创建条件断点,就像我在第三十四页「在断点中使用表达式」中描述的那样,但你可以在 OllyDbg 的许多不同地方使用它们。例如,OllyDbg 的命令行插件可以就地求值表达式并显示结果,让你轻松读取任意内存、检查汇编代码正在计算的数值,或快速获得数学方程的结果。此外,黑客甚至可以通过把表达式与跟踪功能结合起来,创建智能的、与位置无关的断点。
在本节中,我会分享一些表达式引擎在我的工作中派上用场的轶事。我会解释我的思考过程,走完整个调试会话,并把每个表达式分解成它的组成部分,让你看到在游戏破解中使用 OllyDbg 表达式的一些方法。
注 这些示例包含一些汇编代码,但如果你没有太多汇编经验,别担心。只要忽略细节,知道 ECX、EAX 和 ESP 这样的值是进程寄存器,就像第二十九页「查看和编辑寄存器内容」中讨论的那样。然后我会解释其余一切。如果你在我讲这些轶事时对表达式中的操作符、元素或数据类型感到困惑,请参考第三十三页「OllyDbg 的表达式引擎」。