Windows上设好JIT调试时, 有两处没效果.
1.程序异常时,即时调试器没有弹出来.
2.是win7 64弹出来了,但一直中断在系统领空.无法进入EP,或用户领空.(原因暂时不明, 等空了再研究一下吧.)
----------------------------------------------------------
1. 程序异常时,即时调试器没有弹出来
在win10上测试了 od1.x x64dbg windbg 等都没有效果.一开始以为是中文或者空格路径导致的, 换成全英无空格的路径一样没有效果.
换成win7上测试, 居然也没有效果.
研究了一下,发现
32位调试器程序注册表路径是:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
64位调试器程序注册表路径是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
在这个表下有个 REG_SZ 类型的 Auto 子项, 这个子项的键值我系统上缺省是 0, 测试发现把他手动修改成1 就能即时调试了.
用od1.x修改JIT调试时,
点击按钮 "Confirm before attaching"(附加前需要确认) 会将注册表中的 Auto 修改成 0, 这个时候异常不会自动附加调试.
点击按钮 "Attach without confirmation"(附加前无需确认) 会将注册表中的 Auto 修改成 1, 这个时候异常会自动附加调试.
win7 win10下都是如此, 如下图:
ollydbg x64后期再添加即时调试功能时,会注意这一点, 添加时,会将 Auto 修改成1.
也有可能 32位和64位下的 Auto 不能同时设置,只能设置一个生效, 否则就都不生效. (具体的还未测试, 等回头写到这个功能时,再来更新本文,加上测试结果.)
----------------------------------------------------------
2. winx64系统上, 即时调试一直中断在系统领空.进不到EP或代码段.
在win7上测试, 如果系统开启UAC, 被调试的程序和调试器, 是否开启管理员权限(或者兼容其它系统模式)运行都没有问题.都可以正常附加.(前提是只限windbg)
od1.x测试的不行, od1.x想要即时调试, 目标程序必须是管理员权限运行, 调试器自身是否是管理员权限运行无影响.
但win7 x64 系统上 即时调试附加后好像有问题, 一直中断在系统领空, 跳不到OEP. (win1064 win732没有此问题)回头再研究研究.
----------------------------------------------------------
关于注册表项 AeDebug下的三个键值:
Auto:
0: 当系统中某个应用程序发生异常时, 系统会弹一个消息框通知用户(实际我在win7 64 win10 64测试, 没有提示, 也没有附加行为)
1: 当系统中某个应用程序发生异常时, 设置的调试器会自动附加异常进程.
Debugger:
表中缺省值是: drwtsn32 -p %ld -e %ld -g
其中 drwtsn32 (Dr. Watson) (神探夏洛克中的华生医生) 印象中这个程序只有在xp中才有. 以前在xp盛行的时候, 经常看到如下提示框:
"0x????????" 指令引用的 "0x????????" 内存. 该内存不能为"read".
"0x????????" 指令引用的 "0x????????" 内存, 该内存不能为"written".
这个提示框, 实际上就是 神探夏洛克华生医生弹出来的, 如果你很怀恋XP时代的错误提示框,想继续使用,可以在Debugger键值下做手脚 :)
第一个 %ld 参数表示 异常进程的PID
第二个 %ld 参数表示 异常进程的事件
UserDebuggerHotKey:
MSDN上说法:
Specifies the key that, when pressed, establishes a breakpoint in code being debugged.
The debugger interrupts code processing at the breakpoint so the programmer can examine a suspected problem.
其实我看了半天也没整明白这到底是啥意思.我想像的应该是设置好热键, 按一下就弹出调试器!?(这样热键功能似乎还算是有点存在的意义.)
实际上我设置了VK_HOME 对应的HEX值是 0x24, 按了home并没有效果.(有知道的朋友可以跟贴说明一下.)
我猜, 这个功能可能只争对M$自家的windbg. 即在调试的时候, 按一下HOME, 下断点或者别的啥?
具体的没测了,也懒得测了,有兴趣的朋友可以测一下. (测完别忘了反馈哟.)
值得注意的是, MSDN上开头的一句话:
Applies To: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2
也有可能UserDebuggerHotKey的热键功能只适用于2K3系统上.也说不定.懒得去纠结了~
|