windows - Hvordan kan tråd miljø blokke befinde sig over adresse plads grænse?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har for nylig bemærket, at 32-bit versionen af ​​Cheat Engine har sin trådmiljøblok på en højere adresse end hvad der er tilgængeligt for 32-biters adresserum. Efter min viden er brugerpladsen kun tilgængelig for at adressere 0x7FFFFFFF, men denne TEB var placeret på 0xFFFDB000. Hver TEB jeg nogensinde har set startede på 0x7EFD8000 eller 0x7EFDB000, og efterfølgende TEB fortsatte nedad. Jeg antager, da Cheat Engine er en hukommelsesscanner, det er at forenkle scanningsprocessen. Processmiljøblokken var også blevet flyttet. Kan nogen fortælle mig, hvordan det er muligt? Er dette en indstilling i Portable Executable, uden nogen chance?

Bedste reference


for 32 bit programmer tilgængelige adresser fra 0x00000000 til 0xFFFFFFFF, men på x86 platform historisk [0x00000000, 0x7FFFFFFF] var brugerrum og [0x80000000, 0xFFFFFFFF] kernel space. men på x64, hvor 32bit apps kører i wow64-subsystem dette allerede ikke rigtigt - alle 32bit rækkevidde - [0x80000000, 0xFFFFFFFF] er brugerplads. men for kompatibelt grundsystem begrænser alligevel brugeradressens plads til wow64 bit apps til 2GB [0x00000000, 0x7FFFFFFF] som standard. for at bryde dette og have 4GB plads brug brug flag


IMAGE\_FILE\_LARGE\_ADDRESS\_AWARE Programmet kan håndtere adresser på mere end 2 GB. i IMAGE\_FILE\_HEADER.Characteristics


På 64-biters udgaver af Windows har 32-bit applikationer, der er markeret med IMAGE\_FILE\_LARGE\_ADDRESS\_AWARE-flagget, 4 GB adresserum til rådighed. [9]