2

通常我只会作弊并使用 NtQueryInformationThread 获取 ThreadBasicInformation 来获取 TebBaseAddress

但是 wow64 线程有两个堆栈,这只会得到 64 位 Teb。

4

3 回答 3

2

我发现的最好方法是获取 32 位上下文(不是通过 GetThreadContext,而是通过 Wow64GetThreadContext)并使用 Wow64GetThreadSelectorEntry 获取 FS[0] 的地址,然后使用 ReadProcessMemory。但最大的问题是这需要 Win7/Windows2008 Server R2 )

于 2011-11-21T13:23:46.277 回答
1

这是一种更简单但没有记录的方法:http ://redplait.blogspot.ru/2012/12/teb32-of-wow64-process.html

于 2012-12-28T12:13:01.190 回答
1

您是否使用 Windows 调试界面附加到进程?如果是这样,您应该能够在创建新线程时使用事件 CREATE_THREAD_DEBUG_INFO 和 CREATE_PROCESS_DEBUG_INFO 的 lpThreadLocalBase 字段来获取 TEB 基地址。

但我认为这只有在您的调试器从创建过程中控制了该过程时才有效。这无助于附加到现有流程。

于 2012-02-07T01:04:59.413 回答