Skip to content

Latest commit

 

History

History
36 lines (28 loc) · 1.43 KB

200712061424.txt.md

File metadata and controls

36 lines (28 loc) · 1.43 KB

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)