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