スレッドの開始アドレスをで取得したいのですがNtQueryInformationThread
、そのライブラリを追加する必要があります。どうやってやるの?
質問する
4046 次
2 に答える
5
プロジェクトにntdll.lib(Windows DDK / WDKにあります)を追加することをお勧めします。その場合、GetProcAddressのものは必要ありません。
于 2012-06-20T15:07:48.720 に答える
4
私はNtQueryInformationThread
ntdllをロードする必要なく使用しました(私の意見では自動的にロードされます)。http://pastebin.com/ieEqR0eLというコンテンツを含む特別なヘッダー ファイルを準備し、それをプロジェクトに含めるだけで済みました。その後、次のようなことができました。
NTSTATUS status;
THREAD_BASIC_INFORMATION basicInfo;
typedef NTSTATUS ( WINAPI *NQIT )( HANDLE, LONG, PVOID, ULONG, PULONG );
/* Open thread */
HANDLE thread = OpenThread(THREAD_ALL_ACCESS, false, threadId);
/* Get the address of NtQueryInformationThread function. */
NQIT NtQueryInformationThread = ( NQIT )GetProcAddress( GetModuleHandle(TEXT("ntdll.dll")), "NtQueryInformationThread" );
/* Get basic thread information */
status = NtQueryInformationThread(thread, 0, &basicInfo, sizeof(basicInfo), NULL);
CloseHandle(thread);
/* Get address of the Thread Environment Block, stack start address and last stack address */
tebAddress = (DWORD)basicInfo.TebBaseAddress;
DWORD pebAddress = *((DWORD*)(tebAddress+0x30));
/* For example to get stack base address */
stackBase = *((DWORD*)(tebAddress+4));
stackLimit = *((DWORD*)(tebAddress+8));
于 2012-06-20T13:51:05.700 に答える