反编译记事本(4) 未经处理的异常 : 0xC0000005
接下来开始解决运行时错误.

点击"中断"按钮, 鼠标停在触发异常的代码处.

根据 API 函数 LoadString 的参数说明, 并观察各个参数的定义, 可以猜测最可能出问题的是第2个参数. 查看第2个参数的声明:

查看第2个参数的引用 :

显然是数组越界的问题, 而 v3 是数组索引, 根据循环条件 v3 < 45 , 可以猜测数组大小是45.
根据 LoadString 的声明, 第 2 个参数的类型是 UINT, 则数组 off_10090E8 的类型是 UINT**.
在IDA Pro中将该数组声明为UINT*[45], 然后导出, 有些数组元素也要修改类型, 然后替换掉原来的数组声明, 即可解决这个函数中的问题.

对于这个函数中的问题, 我还发现资源似乎没有正确包含, 那么只能去掉notepad.rc中复制过来的代码了. 然后再资源视图中右键 -> 添加资源, 手动创建每个类型的资源, 然后再把具体类型的资源代码复制到具体类型的资源声明中去.

比如添加字符串资源后, rc代码中就有了STRINGTABLE BEGIN END 这个代码, 把原来的字符串资源代码复制到 BEGIN 和 END 之间就能在资源视图中看到下面这样的字符串资源了.
