memory management - Hvor og hvor er hejen allokeret i forhold til en bærbar eksekverbar på Windows NT/10?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg studerer for øjeblikket det bærbare eksekverbare filformat, og jeg har lært om de 9 fælles sektioner som .kode, .data, .rdata, .debug og osv. Men ét stykke information, der synes at være uklart og fraværende fra de papirer, jeg har læst, er placeringen (adresserummet) af programmets 'heap' i hukommelsen med hensyn til dette afsnit, og hvordan det også er tildelt. Er det en del af en af ​​disse datasektioner? 'Jeg har hørt rygter om, at det vises efter .bss sektionen, men det er bare rygter. Er der endda en sæt bunke størrelse (for hver specifik exe selvfølgelig), når Windows loader læser PE og i bekræftende fald, hvad er den baseret på?

Bedste reference


Der er et par felter i IMAGE\_OPTIONAL\_HEADER, der kontrollerer den oprindelige størrelse af standardproceshøjen (GetProcessHeap), men selve bunken er ikke en del af PE-layoutet. [4]


Et program kan oprette yderligere dynger med HeapCreate. Bunken kan også fungere i forskellige tilstande (serialiseret eller ej), og der er også en lav fragmentering heap implementering. [5]


Du kan bruge VMMap til at se, hvor dyngerne er i virtuel hukommelse, men du bør ikke stole på disse oplysninger. ASLR vil flytte dem, hvis du genstarter computeren. [6] [7]