首页
社区
课程
招聘
[求助]int3触发异常 然后系统层层传递异常,最后设置debugport,通知调试器。可是debugport一个数据结构咋能。。。。
发表于: 2009-11-28 23:37 9145

[求助]int3触发异常 然后系统层层传递异常,最后设置debugport,通知调试器。可是debugport一个数据结构咋能。。。。

2009-11-28 23:37
9145

设置debugport之后如何激活调试器,(我想知道是哪个api激活的)或者是系统的哪个api主动检查debugport结构然后激活调试器的,知道的告诉下,具体点 谢谢!

debugport只是一个数据结构总不能使它自己通知的调试器吧


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (10)
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
请参考《软件调试》中有关Windows调试子系统的章节。

“我想知道……具体一点……”,这是楼主问问题的典型方式,然而我不觉得楼主知道了某个API的名字就会有什么实质性的提高。楼主如果能停止问这些零零散散的问题,而是好好的静下心来系统地看一看相关的书籍,你的很多具体问题都可以从中找到答案,也会更容易地建立知识体系。这是这里的不少人在回帖中早就跟楼主说过的,现在我不厌其烦再说一次。
2009-11-29 04:20
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
马大仙 就是不读书,使劲问那种。说多少次都无用。
2009-11-29 12:46
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这本书好贵啊, 100 多
2009-11-29 16:03
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢老大 顺便谢谢告诉我答案的mj0011大牛,另外我想知道这个api是为了看wrk。。。[ATTACH]35285[/ATTACH]
上传的附件:
2009-11-29 17:35
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
6
这句话说反了,你本应该是“通过看wrk而知道这个api”,而不是“知道这个api是为了看wrk”。
如果要看wrk,就老老实实地看,wrk找不到是哪个api吗?当然不是。就从INT3的处理例程KiTrap03开始:

page ,132
subttl "Single Byte INT3 Breakpoin"
;++
;
; Routine Description:
;
; Handle INT 3 breakpoint.
;
; The trap is caused by a single byte INT 3 instruction. A
; BREAKPOINT exception with additional parameter indicating
; READ access is raised for this trap if previous mode is user.
;
; Arguments:
;
; At entry, the saved CS:EIP point to the instruction immediately
; following the INT 3 instruction.
; No error code is provided with the error.
;
; Return value:
;
; None
;
;--
ASSUME DS:NOTHING, SS:NOTHING, ES:NOTHING

ENTER_DR_ASSIST kit3_a, kit3_t, NoAbiosAssist
align dword
public _KiTrap03
_KiTrap03 proc
push 0 ; push dummy error code
ENTER_TRAP kit3_a, kit3_t

cmp ds:_PoHiberInProgress, 0
jnz short kit03_01

lock inc ds:_KiHardwareTrigger ; trip hardware analyzer

kit03_01:
mov eax, BREAKPOINT_BREAK

KiTrap03DebugService:
;
; If caller is user mode, we want interrupts back on.
; . all relevant state has already been saved
; . user mode code always runs with ints on
;
; If caller is kernel mode, we want them off!
; . some state still in registers, must prevent races
; . kernel mode code can run with ints off
;
;
; Arguments:
; eax - ServiceClass - which call is to be performed
; ecx - Arg1 - generic first argument
; edx - Arg2 - generic second argument
;

.errnz (EFLAGS_V86_MASK AND 0FF00FFFFh)
test byte ptr [ebp]+TsEFlags+2,EFLAGS_V86_MASK/010000h
jnz kit03_30 ; fault occured in V86 mode => Usermode

.errnz (MODE_MASK AND 0FFFFFF00h)
test byte ptr [ebp]+TsSegCs,MODE_MASK
jz kit03_10

cmp word ptr [ebp]+TsSegCs,KGDT_R3_CODE OR RPL_MASK
jne kit03_30

kit03_05:
sti
kit03_10:


;
; Set up exception record and arguments for raising breakpoint exception
;

mov esi, ecx ; ExceptionInfo 2
mov edi, edx ; ExceptionInfo 3
mov edx, eax ; ExceptionInfo 1

mov ebx, [ebp]+TsEip
dec ebx ; (ebx)-> int3 instruction
mov ecx, 3
mov eax, STATUS_BREAKPOINT
call CommonDispatchException ; Never return

kit03_30:
; Check to see if this process is a vdm

mov ebx,PCR[PcPrcbData+PbCurrentThread]
mov ebx,[ebx]+ThApcState+AsProcess
cmp dword ptr [ebx]+PrVdmObjects,0 ; is this a vdm process?
je kit03_05

stdCall _Ki386VdmReflectException_A, <03h>
test ax,0FFFFh
jz Kit03_10

jmp _KiExceptionExit

_KiTrap03 endp

看到CommonDispatchException了吧,那么在同一个文件中看到CommonDispatchException的内容:

public CommonDispatchException
align dword
CommonDispatchException proc
cPublicFpo 0, ExceptionRecordLength/4
;
; Set up exception record for raising exception
;

sub esp, ExceptionRecordLength
; allocate exception record
mov dword ptr [esp]+ErExceptionCode, eax
; set up exception code
xor eax, eax
mov dword ptr [esp]+ErExceptionFlags, eax
; set exception flags
mov dword ptr [esp]+ErExceptionRecord, eax
; set associated exception record
mov dword ptr [esp]+ErExceptionAddress, ebx
mov dword ptr [esp]+ErNumberParameters, ecx
; set number of parameters
cmp ecx, 0
je short de00

lea ebx, [esp + ErExceptionInformation]
mov [ebx], edx
mov [ebx+4], esi
mov [ebx+8], edi
de00:
;
; set up arguments and call _KiDispatchException
;

mov ecx, esp ; (ecx)->exception record

.errnz (EFLAGS_V86_MASK AND 0FF00FFFFh)
test byte ptr [ebp]+TsEFlags+2,EFLAGS_V86_MASK/010000h
jz short de10

mov eax,0FFFFh
jmp short de20

de10: mov eax,[ebp]+TsSegCs
de20: and eax,MODE_MASK

; 1 - first chance TRUE
; eax - PreviousMode
; ebp - trap frame addr
; 0 - Null exception frame
; ecx - exception record addr

stdCall _KiDispatchException,<ecx, 0, ebp, eax, 1>

mov esp, ebp ; (esp) -> trap frame
jmp _KiExceptionExit

CommonDispatchException endp

这个KiDispatchException不就出来了吗?你说你真的有好好看wrk吗?
2009-11-29 19:47
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
7
要是咱嫌看wrk太累吧,OK,《软件调试》11.2.2 登记CPU异常:
对于CPU异常,KiTrapXX例程在完成针对本异常的特别动作后,通常会调用CommonDispatchException函数,并通过寄存器将如下信息传递给这个函数。
·将唯一标识该异常的一个异常代码(表11-2)放入EAX寄存器。
·将导致异常的指令地址放入EBX寄存器。
·将其他信息作为附带参数(最多3个)分别放入EDX(参数1)、ESI(参数2)和EDI(参数3)寄存器,并将参数个数放入ECX寄存器。
CommonDispatchException被调用后,它会在栈中分配一个EXCEPTION_RECORD结构,并把以上异常信息存储到该结构中。在准备好这个结构后,它会调用内核中的KiDispatchException函数来分发异常。

以上内容,其实就是对上一楼的wrk代码的描述,这几个API不就也清楚了吗?
至于KiDispatchException的流程,11.3 异常分发过程 这一节都在说明这个问题。

看wrk也可以解决,看《软件调试》这样的书也可以解决,你就是不看,非要人家回答,人家回答你是人情,不回答你是道理。更重要的是,如果你不学会自己去找答案,而总是想从别人嘴里得到一个现成的答案, 那你的学习能力永远不会有所提高。

PS:半夜的时候我没有具体回答你,是因为《软件调试》和wrk当时都没有在身边,全放在实验室以及在那里的电脑上。其实当时说得不太正确,应该是找异常分发过程有关的章节。刚才到实验室,拿起《软件调试》翻两下,到wrk保存的文件夹里搜索一下KiTrap03,就找到了上面的答案。
2009-11-29 19:56
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
轩辕小聪
的学习思路不错。学习了
2009-11-30 08:53
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
膜拜第八个大牛 膜拜。。。软件调试这本书找不到了,我买本 “高级调试” 怎么样?。。 wrk倒是有,以后一定多看。。
2009-11-30 21:38
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
也不能全怪我 LpcRequestWaitReplyoPrtEx不信你去wrk找这个函数!

搜索 'LpcRequestWaitReplyoPrtEx'...
C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\桌面\WRK-V1.2\base\ntos\dbgk\dbgkport.c(137):    st = LpcRequestWaitReplyoPrtEx (Port,
已找到 1 个符合的.
2009-11-30 22:00
0
雪    币: 695
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
小聪回帖 果然高质量
2009-11-30 22:01
0
游客
登录 | 注册 方可回帖
返回
//