我正在开发内核 mod 驱动程序,我需要获取某个进程的所有堆栈大小。
我使用 ZwQuerySystemInformation
来查找进程
然后我使用 ZwQuerySystemInformation
来获取 THREAD_BASIC_INFORMATION
然后我从 TebBaseAddress
读取内存到 NT_TIB
结构
然后我有 tib.StackLimit
, tib.StackBase
if (NT_SUCCESS(PsLookupProcessByProcessId((HANDLE)process_id, &process))) {
if (NT_SUCCESS(MmCpy(process, (PVOID)info.TebBaseAddress, PsGetCurrentProcess(), &tib, sizeof(NT_TIB)))) {
//DbgPrintEx(0, 0, "StackLimit: %#010x to StackBase: %#010x \n", tib.StackLimit, tib.StackBase);
tempStackArea = { 0 };
tempStackArea.Base = (uintptr_t)tib.StackBase;
tempStackArea.Limit = (uintptr_t)tib.StackLimit;
memcpy((PVOID)((ULONG_PTR)StackAreaList + (i * sizeof(StackArea))), &tempStackArea, sizeof(StackArea));
}
}
但是我不知道尺寸是不是
tib.StackBase - tib.StackLimit
我想读取从 tib.StackLimit
到 tib.StackBase
的所有堆栈内存并搜索一些值
是这样用还是不对,还有别的解决办法吗?