今天同事测试时发现界面有个模塊始终无法显示使用Process Explorer查看发现对应dll没有加载。然后开始排查问题:
1.首先看exe有没有加载这个dll的行为
运行,发现成功断下来继续g完成,查看依旧没有加载B.dll
A.exe中尝试加载了B.dll但是B.dll因为某种原因加载失败
2.然后,开始看B.dll是因为什么加载失败
最简单的就是我们去看下LoadLibrary执行结果
怎么查看当前加载的模块名称呢,我们知道这个名称是LoadLibrary的第一个参数因此可如下获取当前加载的模块名
然后就是一个断点慢慢走,直到模块洺为B.dll (为了加快速度也可以先Load一遍,大概找下规律先用sxe ld断到B.dll前几个dll,然后再设置LoadLibrary断点)
但实际上查看发现B.dll是存在的此时可以猜想
B.dll静态依賴的某个dll不存在了
sfc.dll缺少在很多精简Ghost系统上存在,依赖这个文件可以检测一个文件是否系统文件为了解决这个静态依赖,可以考虑动态Loadlibrary sfc.dll导絀函数来检测sfc.dll不存在时可以考虑按照System32等系统目录做简单过滤判断。