TIB Armazenamento Personalizado
Após bastante pesquisa e algumas dicas dadasaqu, Finalmente consegui encontre um layout doFS
segmento (usado pelo Windows para armazenar dados TIB). De particular interesse para mim é oArbitraryUserPointer
membro fornecido no PSDK:
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;
Quão seguro é exatamente o uso dessa variável (no Vista e acima)? e ainda existe em x64?
Secundário é o acesso dessa variável. Estou usando o MSVC e, como tal, tenho acesso ao__readfsdword
& __readgsqword
intrínseca, no entanto, MSDN por algum motivo, marca-o como instruções privilegiadas:
Essas intrínsecas estão disponíveis apenas no modo kernel e as rotinas estão disponíveis apenas como intrínseca
Eles são naturalmentenã Apenas kernel, mas por que eles estão marcados como tal, apenas documentação incorreta? (meus documentos offline do VS 2008 não possuem essa cláusula).
Finalmente, é seguro acessarArbitraryUserPointer
diretamente através de um único__readfsdword(0x14)
ou é preferível usá-lo através do endereço TIB linear? (que ainda exigirá uma leitura deFS
).