2.0 加载某指定DLL时断点命中
http://scz.617.cn/windows/200712061424.txt
Q:
某DLL是动态加载的,我想拦截加载过程,如何针对kernel32!LoadLibraryExW设置条 件断点?以前在SoftICE中是根据[ESP+4]指向的前四个字节做判断,这样做有几点不 足,一是对于Unicode串,实际有效字节只有两个,做为判断特征太勉强了,二是这 个形参有可能是绝对路径,DLL名位于绝对路径的最末端,虽说可以手工调整特征字 节所在偏移,但这个偏移随绝对路径而改变,手工调整时很不方便。实际上我就是想 对形参做正则表达式一类的匹配操作。cdb支持条件断点,但$spat()的第一形参不支 持地址表达式。
A: tk@nsfocus 2007-12-06
如果仅仅想在DLL加载结束的瞬间断下来,不必拦截LoadLibrary(),利用"deferred breakpoint"特性即可:
bp !nonexist
当指定DLL加载结束时会因为无法解析nonexist而断下来,这比拦截LoadLibrary()要 省事得多。
cdb -hd -o ping.exe
lm m apphelp start end module name bp apphelp!nonexist Bp expression 'apphelp!nonexist' could not be resolved, adding deferred bp g ... ... ModLoad: 75d60000 75d87000 C:\WINDOWS\system32\apphelp.dll Breakpoint 0's offset expression evaluation failed. lm m apphelp start end module name 75d60000 75d87000 apphelp (pdb symbols)