OD中加载DLL出错时的处理方法

对于在 OD 中加载 DLL 出错时,一般提示这样一个错误:“LOADDLL.EXE: Unable to load DLL”(有的是 DLL 找不到其它相应模块,提示其它错误,这里都类似)。这时可以采取这样的方法来找到出错位置:首先在 OD 中把“选项->事件->中断于新模块(DLL)”这个选上,重新加载原来出错的 DLL。这时 OD 会自动弹出模块窗口,方便进行观察。当看到加载的 DLL 是 msvcrt.dll 时,这时就可以进行处理了。有几种情况:

1、按 ALT+F9,这时会断在所加载DLL的出错位置。
2、根据原出错 DLL 的入口点,加上基址,CTR+G 转到相应位置,F4运行到相应的地方(如某个 DLL 的 OEP 是 000B1036,基址是 10000000,则在 OD 加载 msvcrt.dll 时,CTR+G 到地址 100B1036 处,F4 运行到这里),这时我们就断在 DLL 的入口处,现在可以自行分析出错原因了。
3、如果在 OD 加载 msvcrt.dll 后,出错的 DLL 能载入到内存中,则可以通过按 ALT+M 打开内存,在 DLL 的代码段上按 F2 设内存访问断点到达相应位置。

小结:

1、通过在 OD 中选中“选项->事件->中断于新模块(DLL)”,再观察加载的 DLL 是 msvcrt.dll 时,这时是处理我们要加载 DLL 的好时机。
2、如果断到出错 DLL 中的代码处,可以根据堆栈来辅助分析出错原因。