最近写了个程序 要遍历系统中所有线程数据,一开始只通过ETHREAD获取线程ID、所关联的进程名等信息的时候是没有问题的,后来通过KTHREAD访问TrapFrame获取线程寄存器信息的时候的时候就会蓝屏。蓝屏代码为
PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except,
it must be protected by a Probe. Typically the address is just plain bad or it
is pointing at freed memory.
eax=b1c6dd64 ebx=894f8371 ecx=b1c6dd64 edx=b1c6dd64 esi=e1003108 edi=894d5020
eip=babe943d esp=b1a85d18 ebp=b1a85d38 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010282
Driver1!MyEnumHandleRoutine+0x8d:
babe943d 8b482c mov ecx,dword ptr [eax+2Ch] ds:0023:b1c6dd90=00000000
用windbg看了一下 所访问的内存不是空地址 是有值的,但是不知道为什么用程序访问就直接蓝屏,是不是KTHREAD的TrapFrame不能随便访问?有没有访问条件啥的? 我看wrk里NtGetContextThread是引用TrapFrame里的数据,不知道有啥注意事项?
kd> dd b1c6dd64+2c
b1c6dd90 00000000 00000000 00000023 022c0023
b1c6dda0 0021c000 7c80a085 7dd58d18 00000001
b1c6ddb0 ffffffff 0000003b 022cfdcc 00000000
b1c6ddc0 00000000 022cfdf4 00000000 7c92e4f4
b1c6ddd0 0000001b 00000206 022cfd9c 00000023
b1c6dde0 00000000 00000000 00000000 00000000
b1c6ddf0 0000027f e7ff0000 00000000 00000000
b1c6de00 00000000 00000000 00001f80 01f9ed3a
[课程]Linux pwn 探索篇!