官方的方式获取线程信息/环境块(TIB / TEB)

Windows中,如果没有logging,很久以前就知道当前线程的线程信息块(TIB)可以在FS:0find。 但是,这只适用于FS寄存器存在于第一位的Intel CPU。 现在我想到基于ARM的Windows系统(Windows Phone和Windows RT)上的TIB。 请问有API吗?

编辑:我想获得崩溃报告的目的线程堆栈基地。

有关TIB / TEB的信息: http : //www.microsoft.com/msj/archive/S2CE.aspx

所有支持的体系结构(包括ARM(Windows RT) NtCurrentTeb()都可以在winnt.h使用宏NtCurrentTeb() ):

 #if defined(_M_ARM) && !defined(__midl) && !defined(_M_CEE_PURE) __forceinline struct _TEB * NtCurrentTeb ( VOID ) { return (struct _TEB *)(ULONG_PTR)_MoveFromCoprocessor(CP15_TPIDRURW); } 

要回答你发布的问题,你可以使用NtQueryInformationThread()来检索一个THREAD_BASIC_INFORMATION结构,它包含一个指向TebBaseAddress成员中的线程TIB的指针。

伊戈尔钉了它。 但是,在ARM汇编中,它是这样的:

 mrc p15, 0, r12, c13, c0, 2 ; r12 now points at TEB/TIB ldr r12, [r12, #4] ; r12 now holds stack base