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

时间:2013-08-18 16:03:50

标签: windows winapi windows-runtime

在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

3 个答案:

答案 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)

伊戈尔钉了它。但仅供参考,在ARM组装中,它是这样的:

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