c ++ - hvorfor er .text sektion på disk og i ram forskellig?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et program lader kalde det 'SampleApplication' (kun 1 exe fil). Jeg går igennem dette program s. Tekst sektion på 2 måder



  1. Openinig filen 'SampleApplication.exe' fra andet program, gå gennem overskrifter, lokalisere .text sektion og skrive data byte ved byte til en fil.

  2. Kørsel SampleApplication.exe, der har instruktioner til at få dens modulpeger, gå gennem overskrifter for at finde den s .text sektion, og udskrive denne sektion byte ved byte til anden fil.



Nu når jeg kompilerer applikationerne i 64 bit-tilstand, er disse filer identiske - bytes skrevet er de samme. MEN når jeg kompilerer i 32bit-tilstand , er nogle byte forskellige. Jeg har grunde (beskrevet nedenfor) for at tro, at disse bytes er dele af adresser. Mit spørgsmål er, hvorfor de er forskellige?


Andre oplysninger, jeg kan tilbyde:



  1. Altid bytes 64 (dec) og 65 (dec) (på disk) ændres til henholdsvis n og n + 1, når programmet er i ram. Eksempel:



Kør program


a) 64 -> 5, 65 -> 6; 


en anden programkørsel


b) 64 -> 5, 65 -> 6;  // bytes are the same


Genompil sampleApplication, kør den igen


c) 64 -> 17, 65 -> 18;   // or 31, 32 or 34, 35 or many other combinations



  1. Jeg kontrollerede med demontering, hvad disse bytes repræsenterer. De synes at repræsentere hukommelsesadressen. For eksempel bytes



i ram (bemærk lidt endianesse)


68 60 24 05 00
push (052460)


er på disken:


68 60 24 40 00
push (402460)


(40 er hex til 64)


Nogen kan fortælle mig med detaljer, hvad der sker? Jeg har virkelig brug for en dyb forståelse af denne mekanisme.

Bedste reference