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



通常我会欺骗和使用NtQueryInformationThread为ThreadBasicInformation获取TebBaseAddress

但是wow64线程有两个堆栈,这将只获得64位的Teb。

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

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

但我认为这只适用于当你的调试器从它的创建控制进程。

这是一个更简单的方法,尽管没有文档记录:http://redplait.blogspot.ru/2012/12/teb32-of-wow64-process.html

最新更新