Trao đổi với tôi

http://www.buidao.com

4/11/10

[Programming] Get starting address của một thread

Hỏi:
Mình thấy trong Process Explorer có trường này, nhưng ko biết cách lấy nó thế nào. Các bạn giúp mình với:


Thanks.

Đáp:

Có một câu hỏi y chang ở đây http://forum.sysinternals.com/forum_...?TID=5127&PN=1
Ở link trên đã có người đưa code lên, tui mạn phép copy về 4rum để tiện tham khảo
Code:
#include 

typedef LONG NTSTATUS;
typedef NTSTATUS (WINAPI *pNtQIT)(HANDLE, LONG, PVOID, ULONG, PULONG);
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#define ThreadQuerySetWin32StartAddress 9

DWORD WINAPI GetThreadStartAddress(HANDLE hThread)
{
NTSTATUS ntStatus;
HANDLE hDupHandle;
DWORD dwStartAddress;
pNtQIT NtQueryInformationThread = (pNtQIT)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQueryInformationThread");
if(NtQueryInformationThread == NULL) return 0;
HANDLE hCurrentProcess = GetCurrentProcess();
if(!DuplicateHandle(hCurrentProcess, hThread, hCurrentProcess, &hDupHandle, THREAD_QUERY_INFORMATION, FALSE, 0)){
SetLastError(ERROR_ACCESS_DENIED);
return 0;
}
ntStatus = NtQueryInformationThread(hDupHandle, ThreadQuerySetWin32StartAddress, &dwStartAddress, sizeof(DWORD), NULL);
CloseHandle(hDupHandle);
if(ntStatus != STATUS_SUCCESS)
return 0;
return dwStartAddress;
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd)
{

CHAR cMessage[9];
wsprintf(cMessage, "%p", GetThreadStartAddress(GetCurrentThread()));
MessageBox(HWND_DESKTOP, cMessage, "Start Address", MB_ICONINFORMATION | MB_OK);
return 0;
}
__________________


reflink: http://virusvn.com/forum/showthread.php?p=13742#post13742