|
|
|
|
|
|
|
Windows内核调试
帖子发起人: 秋雨落 发起时间: 2008-11-09 20:57 下午 回复: 5
|
帖子排序:
|
|
|
|
2008-11-09, 20:57 下午
|
秋雨落
注册: 2008-11-03
发 贴: 4
|
|
|
我在看雪论坛上看到,说用户态调用int 2dh,如果没有调试器就会返回异常,如果有调试器,那就不会返回异常。这个是什么个流程呢? 我在DBGPrint过程中也看到了一直调用到int 2dh,后面就是KiDebugService,然后CommonDispatchException,然后再到KiDispatchException,再到KdpStub或者KdpTrap,可是我怎么也没发现什么时候判断调试器的。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2008-11-10, 00:01 上午
|
秋雨落
注册: 2008-11-03
发 贴: 4
|
|
|
就是说用户态调试器如vc调试器或ollydbg也是KdpTrap?
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2008-11-10, 03:27 上午
|
秋雨落
注册: 2008-11-03
发 贴: 4
|
|
|
我查到的reactos中用户态异常处理的代码:
if (FirstChance)
{
/* Make sure a debugger is present, and ignore user-mode if requested */
if ((KiDebugRoutine) &&
(!(PsGetCurrentProcess()->DebugPort)))
{
/* Call the debugger */
if (KiDebugRoutine(TrapFrame,
ExceptionFrame,
ExceptionRecord,
&Context,
PreviousMode,
FALSE))
{
/* Exception was handled */
goto Handled;
}
}
/* Forward exception to user mode debugger */
if (DbgkForwardException(ExceptionRecord, TRUE, FALSE)) goto Exit;
这儿先是判断 if ((KiDebugRoutine) &&
(!(PsGetCurrentProcess()->DebugPort)))
就是说DebugPort不为零的话,那么调用KiDebugRoutine,
否则就直接DbgkForwardException发往调试器。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 软件调试 » Windows内核调试 » 请问大家一个关于int 2d的问题
|
|
|
|
|
|