各位。
学习系统调用的过程中
我在KiFastCallEntry处设了断点。
其后有一行代码
/* Get a pointer to the current thread */
move esi,[ebx+KPCR_CURRENT_THREAD]
我的理解是。这行代码使esi指向当前进程的KTHREAD结构吧?
————————————————————————————————————
kd> t
nt!KiFastCallEntry+0x39:
80883849 6a3b push 3Bh
kd> t
nt!KiFastCallEntry+0x3b:
8088384b 8bb324010000 mov esi,dword ptr [ebx+124h]
kd> t
nt!KiFastCallEntry+0x41:
80883851 ff33 push dword ptr [ebx]
kd> r
eax=00000045 ebx=ffdff000 ecx=80042000 edx=00b4fda4
esi=81fd6220 edi=00000000
eip=80883851 esp=f68c4db4 ebp=00b4fde0 iopl=0 nv up di pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000002
nt!KiFastCallEntry+0x41:
80883851 ff33 push dword ptr [ebx] ds:0023:ffdff000=f68c46b8
———————————————————————————————————————————
这是esi的值应该是本进程KTHREAD的地址。
kd> dd 81fd6220
81fd6220 006e0006 00000000 81fd6228 81fd6228
81fd6230 81fd6230 81fd6230 f68c5000 f68c2000
81fd6240 f68c4914 00000000 81fd6248 81fd6248
81fd6250 81fd6250 81fd6250 81fd9510 01000000
81fd6260 00000000 00000000 000002bc 01000a02
81fd6270 00000102 81fd62c8 0f060001 00000001
81fd6280 ffdffb00 81fac2b0 00000000 0000179a
81fd6290 00000000 7ffdb000 00a00008 00000001
kd> u 81fd6220
81fd6220 06 push es
81fd6221 006e00 add byte ptr [esi],ch
81fd6224 0000 add byte ptr [eax],al
81fd6226 0000 add byte ptr [eax],al
81fd6228 2862fd sub byte ptr [edx-3],ah
81fd622b 812862fd8130 sub dword ptr [eax],3081FD62h
81fd6231 62 ???
81fd6232 fd std
我不确定我说的是不是对的。而且。我也不确定任何判断一块内核存的是数据还是代码。。。
新手。望解答
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课