我正在模块中编写线程查找器。我的目标是找到进程中的所有线程并找到当前工作地址位置的线程。喜欢下面的图片。我使用 NtQueryInformationThread API 来实现这个目标。
我正在搜索所有网络,我发现了一些代码片段。我编译并运行我的程序,但线程起始地址始终为 0x00000 或 0xccccc。我哪里做错了?我的线程起始地址查找器功能在这里:
#define ThreadQuerySetWin32StartAddress 9
typedef NTSTATUS(WINAPI* NTQUERYINFOMATIONTHREAD)(HANDLE, LONG, PVOID, ULONG, PULONG);
DWORD WINAPI GetThreadStartAddress(__in HANDLE hThread)
{
NTSTATUS ntStatus;
DWORD dwThreadStartAddr = 0;
NTQUERYINFOMATIONTHREAD NtQueryInformationThread;
if ((NtQueryInformationThread = (NTQUERYINFOMATIONTHREAD)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQueryInformationThread"))) {
ntStatus = NtQueryInformationThread(hThread, ThreadQuerySetWin32StartAddress, &dwThreadStartAddr, sizeof(DWORD), NULL);
}
return dwThreadStartAddr;
}