通常我只会作弊并使用 NtQueryInformationThread 获取 ThreadBasicInformation 来获取 TebBaseAddress
但是 wow64 线程有两个堆栈,这只会得到 64 位 Teb。
我发现的最好方法是获取 32 位上下文(不是通过 GetThreadContext,而是通过 Wow64GetThreadContext)并使用 Wow64GetThreadSelectorEntry 获取 FS[0] 的地址,然后使用 ReadProcessMemory。但最大的问题是这需要 Win7/Windows2008 Server R2 )
这是一种更简单但没有记录的方法:http ://redplait.blogspot.ru/2012/12/teb32-of-wow64-process.html
您是否使用 Windows 调试界面附加到进程?如果是这样,您应该能够在创建新线程时使用事件 CREATE_THREAD_DEBUG_INFO 和 CREATE_PROCESS_DEBUG_INFO 的 lpThreadLocalBase 字段来获取 TEB 基地址。
但我认为这只有在您的调试器从创建过程中控制了该过程时才有效。这无助于附加到现有流程。