我正在C的迷你Windows进程管理器上工作,我有一个线程的句柄。
如何检索该线程的起始地址?事情是这样的:
如何在Windows中检索线程的起始地址?
4
A
回答
4
这样的问题在几天前已经被问到了。这里有一个简单的解决方案:
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;
}
来源:http://forum.sysinternals.com/how-to-get-the-start-address-and-modu_topic5127_post18072.html#18072
您可能必须包含这个文件:http://pastebin.com/ieEqR0eL
相关问题:How to add ntdll.dll to project libraries with LoadLibrary() and GetProcAddress() functions?
1
你应该能够得到一个堆栈跟踪与StackWalk64或相关功能,然后用dbghelp.dll解析它。
这CodeProject上的文章可以解释这一切详细: http://www.codeproject.com/KB/threads/StackWalker.aspx
3
NtQueryInformationThread
与ThreadQuerySetWin32StartAddress
。另一种可能是用StackWalk64
走线的堆栈。
如果您只需要起始地址,NtQueryInformationProcess
是lot更简单。即使编码相当简洁,走栈也需要几百个左右。
相关问题
- 1. 线程起始地址
- 2. 获取线程起始地址
- 3. 如何检索原始目标地址
- 4. 如何检索远程IP地址?
- 5. 如何获取C++中的进程的起始/基地址?
- 6. 如何从iPhone的地址簿中检索地址。
- 7. 如何将线程的起始地址与模块名称匹配?
- 8. 如何在Windows Phone中检索字符串中的联系人地址?
- 9. 如何检测正在写入堆栈地址的线程?
- 10. 如何检索Meteorjs上的IP地址?
- 11. 在nasm中指定起始地址?
- 12. 的Windows:以编程方式检索手动配置IPv6地址
- 13. 如何获取当前进程的起始地址--- Linux
- 14. 如何将一段的起始地址写入ROM中的专用地址
- 15. ip地址检索
- 16. 在汇编编程中获取堆栈的起始地址
- 17. 在Go中,如何从开放的TCPConn *中检索IP地址?
- 18. windbg中disassamble函数的起始地址
- 19. Arduino中的XBee起始地址
- 20. C++ Non-Pod起始地址
- 21. 如何检索地址簿内容?
- 22. 如何检索WiFi Direct MAC地址?
- 23. Windows Store应用程序(C#/ Xaml)检索IP地址
- 24. 如何从Grails中的IP地址检索地理位置?
- 25. 如何使用multiValues在Cocoa的地址簿中检索kABPhoneNumber?
- 26. 如何从附近的主机,在Python中检索MAC地址?
- 27. 如何检索回购的远程git地址?
- 28. 如何从其成员的地址获取struct的起始地址
- 29. 检索的IP地址与RKA IP地址的中间件
- 30. Java:如何在C++中存储和检索内存地址
谢谢,但这个函数会返回一个数字。 如何将其作为起始地址使用? –
该函数返回目标进程地址空间中线程的起始地址。您可以以任何您想要的方式使用它(例如,如果您知道函数定义,则可以使用CreateRemoteThread函数将其转换并调用)。 –
我可以找回像这样的东西:chrome.dll!chromeMain + 0x11ded 使用那个数字吗? –