在Windows中,如果没有记录,很久以来就知道可以在FS:0找到当前线程的线程信息块(TIB)。但这仅适用于首先存在FS寄存器的Intel CPU。现在我想在基于ARM的Windows系统(Windows Phone和Windows RT)上访问TIB。请问有API吗?
编辑:我想获得用于崩溃报告目的的线程堆栈基础。
有关TIB / TEB的信息:http://www.microsoft.com/msj/archive/S2CE.aspx
答案 0 :(得分:8)
NtCurrentTeb()
中的宏winnt.h
适用于所有受支持的体系结构,包括ARM(Windows RT):
#if defined(_M_ARM) && !defined(__midl) && !defined(_M_CEE_PURE)
__forceinline
struct _TEB *
NtCurrentTeb (
VOID
)
{
return (struct _TEB *)(ULONG_PTR)_MoveFromCoprocessor(CP15_TPIDRURW);
}
答案 1 :(得分:6)
要回答您发布的问题,您可以使用NtQueryInformationThread()
检索THREAD_BASIC_INFORMATION
结构,其中包含指向其TIB
成员中帖子TebBaseAddress
的指针。
答案 2 :(得分:2)
mrc p15, 0, r12, c13, c0, 2 ; r12 now points at TEB/TIB
ldr r12, [r12, #4] ; r12 now holds stack base