经过大量的谷歌搜索以及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文档没有此子句)。

最后,通过单个ArbitraryUserPointer直接访问__readfsdword(0x14)是安全的还是最好通过线性TIB地址使用它? (仍然需要从FS读取)。

最佳答案

ArbitraryUserPointer是一个内部字段,不通用。操作系统在内部使用它,如果覆盖它,则会损坏内容。我承认它的名字很差。

10-06 12:31