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

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

问题描述:

通常我只会欺骗和使用NtQueryInformationThread为ThreadBasicInformation 得到TebBaseAddress如何从x64模式的windows下的现有32位进程获得32位堆栈限制/ 32位TEB/TIB?

但WOW64线程有两个栈,这样只会得到64位TEB。

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

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

但我认为这只适用于如果您的调试器已经从其创建过程控制过程。这将无助于附加到现有的流程。

+0

是的,这是对现有的流程,但是这是一个很好的点。其他人可能会觉得满意。 – Dan

这是一个比较容易,虽然无证,方法:http://redplait.blogspot.ru/2012/12/teb32-of-wow64-process.html

+1

似乎有效,我个人更喜欢: http://www.dumpanalysis.org/blog/index.php/2010/10/08/raw-stack-dump-of-all-threads-part-4/ – Dan