7

在 Windows 中,如果没有记录的话,很早就知道当前线程的线程信息块 (TIB) 可以在 FS:0 找到。但这仅适用于首先存在 FS 寄存器的 Intel CPU。现在我想在基于 ARM 的 Windows 系统(Windows Phone 和 Windows RT)上使用 TIB。请问有那个API吗?

编辑:我想获取线程堆栈库以用于崩溃报告。

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

4

3 回答 3

11

该宏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);
}
于 2013-08-19T09:42:57.717 回答
8

要回答您发布的问题,您可以使用NtQueryInformationThread()检索THREAD_BASIC_INFORMATION结构,其中包含指向TIBTebBaseAddress成员中线程的指针。

于 2013-08-18T22:53:58.953 回答
3

伊戈尔成功了。但仅供参考,在 ARM 汇编中它是这样的:

mrc p15, 0, r12, c13, c0, 2 ; r12 now points at TEB/TIB
ldr r12, [r12, #4] ; r12 now holds stack base
于 2013-11-23T23:29:03.400 回答