因为这次比较顺利， 外加AI分析了好几次没有出来。就没有详细的对话session

我的方式如下：

1. 先叫AI分析exe， 重命名函数
2. 将所有看起来和音频相关的函数打上断点。
3. 将会一直触发的断点取消，
4. 手动触发一次语音暂停， 直到找到那个会在语音中断时候才会触发的断点

对于这款游戏我找到的是这个： Sound_DestroyCtrl ， 打上断点。


4. 触发断点后往上翻调用链， 把stack 贴给ai， 叫他进一步重命名调用链上的变量，函数

00:0000  001AFA68 -> 0042FF28 (.text ! sub_42FF20+8) -> test [esp+4+arg_0], 1
01:0004  001AFA6C -> 02C60A78 -> 00453298 -> [...] (.text ! loc_426530) -> push esi
02:0008  001AFA70 -> 0042FABE (.text ! Sound_BufferCleanup+1E) -> mov eax, [esi+edi*8+2Ch]
03:000C  001AFA74 -> 00000001
04:0010  001AFA78 -> 0000014F
05:0014  001AFA7C -> 02906E60 -> 02C60A78 -> [...] (.text ! loc_426530) -> push esi
06:0018  001AFA80 -> 00427CD0 (.text ! Sound_ReleaseVoiceChannel+30) -> mov edx, 20h ; ' '
07:001C  001AFA84 -> 00000001
08:0020  001AFA88 -> 043699D0 (debug174) -> 00000005
09:0024  001AFA8C -> 00424AAE (.text ! sub_424790+31E) -> mov ecx, esi  <----- ***** 看这里
10:0028  001AFA90 -> 00000202
11:002C  001AFA94 -> 02901360 (debug088) -> 00000000
12:0030  001AFA98 -> 00000000
13:0034  001AFA9C -> 001AFBF4 -> 00000202
14:0038  001AFAA0 -> 004100E0 (.text ! sub_410010+D0) -> mov al, 1
15:003C  001AFAA4 -> 000000ED
16:0040  001AFAA8 -> 00000202
17:0044  001AFAAC -> 00435447 (.text ! WndProc_Main+717) -> mov eax, [esp+10h+lParam]

这里的代码刚好是根据input 做一些操作

把对应点位函数nop即可（详细的请打开ida 数据库Edit->Patch Program -> Patch Bytes） 可以看到我patch的具体点位