【发布时间】:2013-01-15 16:55:43
【问题描述】:
经过相当多的谷歌搜索和here 的一些提示,我终于设法找到了FS 段的find a layout(Windows 用来存储TIB 数据)。我特别感兴趣的是 PSDK 中提供的ArbitraryUserPointer 成员:
typedef struct _NT_TIB {
struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
PVOID StackBase;
PVOID StackLimit;
PVOID SubSystemTib;
union {
PVOID FiberData;
DWORD Version;
};
PVOID ArbitraryUserPointer;
struct _NT_TIB *Self;
} NT_TIB;
使用这个变量到底有多安全(在 Vista 和更高版本下)?它在 x64 上还存在吗?
其次是对该变量的访问。我正在使用 MSVC,因此我
可以访问 __readfsdword 和 __readgsqword 内在函数,但是,MSDN 出于某种原因将它们标记为特权指令:
这些内在函数仅在内核模式下可用,而例程仅作为内在函数可用。
它们当然不是内核而已,但为什么它们被标记为这样,只是不正确的文档? (我的离线 VS 2008 文档没有这个子句)。
最后,通过单个__readfsdword(0x14) 直接访问ArbitraryUserPointer 是否安全,或者更喜欢通过线性TIB 地址使用它? (这仍然需要阅读FS)。
【问题讨论】:
标签: windows low-level memory-segmentation