在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