c ++ - TIB adgang i Win32

Indlæg af Hanne Mølgaard Plasc

Problem



Graver ind i implementeringen af ​​Win32 API funktioner, der arbejder med TIB, såsom:



  • TLS-adgangsfunktioner: TlsAlloc, TlsFree, TlsSetValue, TlsGetValue

  • GetLastError, SetLastError

  • meddelelsessystemet: GetMessage, PeekMessage og osv.



man finder ud af, at alle har adgang til TIB (nogle gange kaldet TEB) ved at læse indholdet af fs:[0x18] vælgeren.


OTOH dette er unødvendigt, da fs registrerer direkte point til det. I henhold til denne artikel og hvad jeg ser i praksis, holder fs -registret adressen til begyndelsen af ​​TIB-strukturen, mens den i en forskydning 0x18 har pegeren til sig selv. [15]


Hvad kunne der være grunden til at indirekte få adgang til TIB?

Bedste reference


Enhver instruktion, der bruger FS kræver en tilsidesættelse, som tilføjer en byte til instruktionen (og kræver generelt samlesprog for at bruge det overhovedet). Pegeren på FS:18 er (i det mindste hvis hukommelsen fungerer korrekt) baseret på DS i stedet, så den kan bruges uden tilsidesættelse, gemme en byte, når den er brugt og (vigtigst for mange folk) kan bruges direkte fra et højere niveau sprog som C eller C ++ i stedet for at kræve monteringssprog.