注册

CpuDbg x96

查看: 1803|回复: 0
收起左侧

[多款调试器] Just-in-time debugging(调试器即时调试不生效)

[复制链接]
发表于 2022-4-23 05:23:58 | 显示全部楼层 |阅读模式
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下都是如此, 如下图:

jit.png

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系统上.也说不定.懒得去纠结了~


回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2024-5-18 14:48 , Processed in 0.078125 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表