不好意思,我之前用的系统是番茄花园,鬼知道改了什么东西,现在还原成T61自带的系统看了看~
在windbg file-》 symbol search path中设置为srv*d:\sym*http://msdl.microsoft.com/download/symbols
那么你D:\sym下的调试符号,就随着你调试程序的越来越多,也就越来越多了!
内部函数,就是未导出,自己的内部调来调去用的。在IDA中看就是sub_xxxx
具体步骤
你可以打开windbg 随便加载个记事本什么的。
让他跑起来,然后在Ctrl+Break,
在命令行,输入 u 77d1c5e2 回车
77d1c5dd 90 nop
77d1c5de 90 nop
77d1c5df 90 nop
77d1c5e0 90 nop
77d1c5e1 90 nop
//以下是命令显示,你可以在反汇编窗口的offset:处输入 77d1c5e2
77d1c5e2 b839120000 mov eax,1239h
77d1c5e7 ba0003fe7f mov edx,offset SharedUserData!SystemCallStub (7ffe0300)
77d1c5ec ff12 call dword ptr [edx]
77d1c5ee c20800 ret 8
77d1c5f1 81cf80ff0000 or edi,0FF80h
77d1c5f7 eb82 jmp USER32!GetKeyState+0x66 (77d1c57b)
77d1c5f9 90 nop
77d1c5fa 90 nop
77d1c5fb 90 nop
77d1c5fc 90 nop
77d1c5fd 90 nop
看,是去调用systemcall的一个代理。好,现在输入命令 bp 77d1c5e2 回车 g 回车让程序继续跑起来,在记事本中随便敲个字符。
0:001> g
Breakpoint 0 hit
eax=00000100 ebx=0001120b ecx=0007fefc edx=7c92eb94 esi=0007fefc edi=77d191d6
eip=77d1c5e2 esp=0007fec4 ebp=0007fed0 iopl=0 nv up ei ng nz ac pe cy
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000297
USER32!IsWindowUnicode+0x34:
77d1c5e2 b839120000 mov eax,1239h
断下来了,按两下F11(单步跟)
输入命令 dd [edx]
0:000> dd [edx]
7ffe0300 7c92eb8b 7c92eb94 00000000 00000000
7ffe0310 00000000 00000000 00000000 00000000
程序将挑去执行7c92eb8b,让我们看看那里有什么东西。
输入命令 u 7c92eb8b
0:000> u 7c92eb8b
ntdll!KiFastSystemCall:
7c92eb8b 8bd4 mov edx,esp
7c92eb8d 0f34 sysenter
7c92eb8f 90 nop
7c92eb90 90 nop
这里把你调用的参数地址放入edx,然后sysenter进入内核,
具体干嘛去了,要查这句
mov eax,1239h
一般这里都是SSDT的服务号。但是1239h这么大的数,我也没见过~~~
就不知道了~~~抱歉
我把它当成偏移计算了一下。
0
:000> u 7c921e39
ntdll!ceil+0x1b:
7c921e39 1f pop ds
7c921e3a 92 xchg eax,edx
7c921e3b 7c66 jl ntdll!ceil+0x85 (7c921ea3)
7c921e3d 0f28c8 movaps xmm1,xmm0
7c921e40 660f28f8 movapd xmm7,xmm0
7c921e44 660f73d034 psrlq xmm0,34h
7c921e49 660f7ec0 movd eax,xmm0
7c921e4d 660f5405401f927c andpd xmm0,xmmword ptr [ntdll!ceil+0x122 (7c921f40)]
多媒体指令??记事本照理应该不会用这东西吧,希望有知道的高手,指点下~~
一起进步