找出从哪里开始跟踪¶
为了找到好位置,我在 OllyDbg 的 CPU 窗口中打开游戏主模块,右键单击反汇编窗格,选择「搜索 → 所有模块间调用」。「引用」窗口弹出,显示游戏调用的外部 API 函数列表。
几乎所有游戏软件都用 Windows 的 USER32.PeekMessage()函数轮询新消息,所以我用「目标」列对列表排序,输入 PEEK(窗口获得焦点时,只需输入名字即可搜索列表)定位到对 USER32.PeekMessage() 的第一次调用。
由于按「目标」排序,对这个函数的每次调用都连续地列在第一调用之后,如图 2-5 所示。我选择每个并按下 F2,在每个上设置断点。
虽然有大约十几个对 USER32.PeekMessage() 的调用,但只有两个触发了我的断点。更好的是,活动的调用在无条件循环中彼此相邻。在这个循环的底部有大量内部函数调用。这看起来完全像一个主游戏循环。