如何自动启动调试器

这几天在干活儿的时候遇到了一个问题,一个程序,且称之为a.exe,是有问题的需要调试.我有a的源代码,然而这个程序需要在命令行下面被另外一个程序b.exe调用,b.exe在调用a之前会设置一大堆的环境变量(大概有一百多个),现在的问题是如何用debugger来重现b.exe的错误并且去调试它。
以前我也遇到过很多类似的情况,有的比这个更惨,我甚至都没有源代码。我的做法是利用debugger的jit功能,修改b.exe,在其入口处加一个int 3,有源码就在main的开头加一个DebugBreak,没有的话就动用某些调试及反汇编工具把某条指令改成int3,然后按照正常的方式去执行该程序,这样在开始后系统就会弹出异常,并询问我是否要debug,当然前提是你要安装一个JIT的debugger,比如说VS。
今天偶尔发现了另外一个方法,其实这个以前做windows developer培训的时候别人也讲过,只是当时忘了记,然后就想不起来了。那就是windows的注册表中有一个Image File Execution Options项,通过这个可以告诉系统在加载某个PE文件的时候做一些事情,当然主要是debug相关的内容了。这个注册表项全路径是HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image file execution options\<module name>,具体的解释可以参考MSDN和google。不幸的是好像MSDN上面也没有说明下面可以有多少种value,但是起码debugger是有的。
好奇之余我又看了一下我自己机器上的内容,呵呵,还真不少,考虑到不清楚这些内容属不属于公司机密,就不贴出来了。
 
 
 
Advertisements
This entry was posted in 计算机与 Internet. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s