windows - TIB 定制存储

标签 windows low-level memory-segmentation

经过大量谷歌搜索并给出一些提示后 here ,我终于成功了find a layout FS 段(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由于某种原因将这些标记为特权指令:

These intrinsics are only available in kernel mode, and the routines are only available as intrinsics.

它们当然不仅仅是内核,但为什么它们被标记为这样,只是不正确的文档? (我的离线 VS 2008 文档没有此条款)。

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

最佳答案

ArbitraryUserPointer 是一个不用于一般用途的内部字段。操作系统在内部使用它,如果你覆盖它,就会损坏东西。我承认它的名字很糟糕。

关于windows - TIB 定制存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9261455/

相关文章:

c++ - 测量由我的程序引起的设备驱动程序 CPU/IO 利用率

ios - 开发人员可以访问的最低级别的官方触摸输入 API 是什么? (苹果手机)

assembly - x86实模式段重叠如何帮助节省内存?

assembly - 我们看到一个进程的虚拟地址(在分页系统中),这些虚拟地址存在哪里?

c - IOCTL - 了解文件描述符参数

c - load_seg_reg(ES,0xfffc): invalid segment when trying to run kernel code from boot sector

c# - 套接字接收挂起

c++ - 使用 cmake 和 mingw 在 mac OSX 上交叉编译 dll

windows - 在 Windows 上的 Qt 可执行文件中设置应用程序信息

C:从链表中检索 char 值