如何从内核模块获取进程堆栈大小

时间:2021-03-15 22:56:09

标签: c++ memory kernel

我正在开发内核 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.StackLimittib.StackBase 的所有堆栈内存并搜索一些值 是这样用还是不对,还有别的解决办法吗?

0 个答案:

没有答案