| PEB 0x2C 中的 KernelCallbackTable 非常有意思,WIN是基于消息驱动的从某种迹象上来看确实是这样如CRSS的LPC通信,IRP I/O 与 设备的通信。 
 kernel32!OpenProcess -> ntdll!ZwOpenProcess -> ntdll!KiFastSystemCall -> sysenter -> nt!KiFastCallEntry -> nt!NtOpenProcess -> nt!KiFastCallEntry(返回后)-> nt!KiServiceExit -> sysexit -> ntdll!KiFastSystemCallRet -> kernel32!OpenProcess
 
 这是一个普通的系统调用过程 ring3->ring0->ring3
 
 而有些时候情况并不是这样,系统有时需要一个回调,程序使用Int 2B KiCallbackReturn 把一条消息抛给系统(如WM_CHAR、WM_PAINT),系统并不会在内核中直接处理而是给了用户hook的机会,KiCallbackReturn -> nt!KeUserModeCallback -> nt!KiCallUserMode -> nt!KiServiceExit -> ntdll!KiUserCallbackDispatcher -> 回调函数 -> int2B  循环
 
 可以看到KiServiceExit后回到Ntdll Ring3层 调用 KiUserCallbackDispatcher 此函数是可以断下来的分析之。
 复制代码77546FC0 >  64:8B0D 0000000>MOV ECX,DWORD PTR FS:[0]
77546FC7    BA A06F5477     MOV EDX,ntdll.KiUserCallbackExceptionHandler
77546FCC    8D4424 10       LEA EAX,DWORD PTR SS:[ESP+10]
77546FD0    894C24 10       MOV DWORD PTR SS:[ESP+10],ECX
77546FD4    895424 14       MOV DWORD PTR SS:[ESP+14],EDX                      ; ntdll.KiUserCallbackDispatcher
77546FD8    64:A3 00000000  MOV DWORD PTR FS:[0],EAX
77546FDE    83C4 04         ADD ESP,4
77546FE1    5A              POP EDX                                            ; ntdll.KiUserCallbackDispatcher
77546FE2    64:A1 30000000  MOV EAX,DWORD PTR FS:[30]
77546FE8    8B40 2C         MOV EAX,DWORD PTR DS:[EAX+2C]
77546FEB    FF1490          CALL DWORD PTR DS:[EAX+EDX*4]
77546FEE    50              PUSH EAX
77546FEF    6A 00           PUSH 0
77546FF1    6A 00           PUSH 0
77546FF3    E8 70E4FFFF     CALL ntdll.ZwCallbackReturn
77546FF8    8BF0            MOV ESI,EAX
77546FFA    56              PUSH ESI
77546FFB    E8 05010000     CALL ntdll.RtlRaiseStatus
77547000  ^ EB F8           JMP SHORT ntdll.77546FFA
很果断的取  KernelCallbackTable 的地址复制代码77546FE2    64:A1 30000000  MOV EAX,DWORD PTR FS:[30]
77546FE8    8B40 2C         MOV EAX,DWORD PTR DS:[EAX+2C]
KernelCallbackTable 存在User32中 贴一段
 复制代码76F6D568 >76F564EB  user32.__fnCOPYDATA
76F6D56C  76F9F0BC  user32.__fnCOPYGLOBALDATA
76F6D570  76F64F59  user32.__fnDWORD
76F6D574  76F5B2A1  user32.__fnNCDESTROY
76F6D578  76F801A6  user32.__fnDWORDOPTINLPMSG
76F6D57C  76F9F196  user32.__fnINOUTDRAG
76F6D580  76F86BFD  user32.__fnGETTEXTLENGTHS
76F6D584  76F9F3EA  user32.__fnINCNTOUTSTRING
76F6D588  76F5AC7A  user32.__fnPOUTLPINT
76F6D58C  76F9F2F5  user32.__fnINLPCOMPAREITEMSTRUCT
76F6D590  76F5E921  user32.__fnINLPCREATESTRUCT
76F6D594  76F6F057  user32.__fnINLPDELETEITEMSTRUCT
76F6D598  76F8629A  user32.__fnINLPDRAWITEMSTRUCT
76F6D59C  76F9F333  user32.__fnINLPHLPSTRUCT
76F6D5A0  76F9F333  user32.__fnINLPHLPSTRUCT
76F6D5A4  76F9F1D6  user32.__fnINLPMDICREATESTRUCT
.........
.........
 |