反编译记事本(5)
继续运行项目, 出现如下问题 :

观察异常代码位置 :

异常中断的时候, dword_1009070 的值为16, 观察它的定义 :

十进制的16是十六进制的10, 根据 *(WORD *) dword_1009070, 可以猜测它是一个数组, 而定义处出现明显的等差数列规律, 可以肯定 dword_10090及后面的一些元素构成一个WORD数组.
但是有个问题, 0x13后面的是45, 再后面才是0x14, 这样的话数组长度是多少就很难确定. 对这种情况的处理是 : 把所有这样的变量组成一个数组. 因为这很可能是一个结构体数组.
合并所有的变量后得到了一个 从 1到45的数组, 除了45处在中间外, 其他元素都是正常的.

此时, 又出现了另一个问题 :

这个数组引用了导出数组的元素, 但是IDA无法识别出来, 元素都变成常量. 如果手动解决的话就太繁琐了, 一个简单的解决方法如下:

接下来就需要把引用了修改变量的地方都处理一下了.
处理完后运行, 发现还是报那个错误. 只能看汇编代码比对了.

发现这里确实是解指针的引用, 但是反编译的代码不应该是 *(WCHAR *)dword_1009034[15]; , 而应该是直接取数组元素的值.
