通常我只會欺騙和使用NtQueryInformationThread爲ThreadBasicInformation 得到TebBaseAddress如何從x64模式的windows下的現有32位進程獲得32位堆棧限制/ 32位TEB/TIB?
但WOW64線程有兩個棧,這樣只會得到64位TEB。
通常我只會欺騙和使用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基地址。
但我認爲這隻適用於如果您的調試器已經從其創建過程控制過程。這將無助於附加到現有的流程。
這是一個比較容易,雖然無證,方法:http://redplait.blogspot.ru/2012/12/teb32-of-wow64-process.html
似乎有效,我個人更喜歡: http://www.dumpanalysis.org/blog/index.php/2010/10/08/raw-stack-dump-of-all-threads-part-4/ – Dan
是的,這是對現有的流程,但是這是一個很好的點。其他人可能會覺得滿意。 – Dan