在 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
在 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
该宏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);
}
要回答您发布的问题,您可以使用NtQueryInformationThread()
检索THREAD_BASIC_INFORMATION
结构,其中包含指向TIB
其TebBaseAddress
成员中线程的指针。
伊戈尔成功了。但仅供参考,在 ARM 汇编中它是这样的:
mrc p15, 0, r12, c13, c0, 2 ; r12 now points at TEB/TIB
ldr r12, [r12, #4] ; r12 now holds stack base