經過相當多的谷歌搜索和一些提示here,我終於設法FS
段(由windows用來存儲TIB數據)的find a layout。特別感興趣的我是在PSDK提供的ArbitraryUserPointer
成員:TIB定製存儲
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
讀取)。
嗯,那是令人失望的,尤其是上了年紀MSVC文章它標誌着下來,應用程序管理。在哪裏有任何文檔,哪些成員是應用程序管理vs操作系統管理的?我基本上在尋找隱藏一個不是TLS的指針的地方 – Necrolis 2012-02-14 06:45:32
TLS是我在TEB中唯一可以想到的應用程序可以免費使用的東西。 (如果還有別的東西像'ArbitraryUserPointer',兩個DLL如何協商對它的控制?) – 2012-02-14 08:48:51
我不可能hi-jiack SEH /堆棧安全令牌嗎? (我可以保證我不會有任何SEH /安全令牌用於我想要的用途)。除此之外,我想我會堅持'__declspec(線程)'爲我的單線程數據... – Necrolis 2012-02-14 09:07:56