如何从x64模式下的Windows下的现有32位进程中获取32位堆栈限制/ 32位TEB / TIB?

时间:2011-11-21 13:22:19

标签: debugging winapi wow64

通常我会欺骗并使用NtQueryInformationThread进行ThreadBasicInformation 获取TebBaseAddress

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

3 个答案:

答案 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