[so] [Tema3][Linux] Copiere date din executabil

Adrian Șendroiu molecula2788 at gmail.com
Sat Apr 21 16:14:12 EEST 2018


Salut,

> Nu imi este foarte clar ce date ar trebui sa copiez mai exact dupa ce am
> facut apelul mmap pe adresa corespunzatoare si cu permisiunile specificate.
> Initial, am crezut ca trebuie sa deschid executabilul in modul read si sa ma
> folosesc de acel "offset" pentru a stii de unde mai exact copiez datele din
> executabil in memorie. Apoi, am observat insa ca exista 2 segmente cu o
> aceeasi valoare pentru offset.

În urma unui fault tu pornești de la o adresă virtuală - adresa unde
s-a făcut fault-ul. Mai departe poți să obții segmentul care conține
acea adresă. Apoi acel segment are un offset în fișier.

Punând toate astea cap la cap, trebuie să faci ca în pagina în care
s-a făcut fault să ajungă datele corespunzătoare din fișier. Poți face
asta fie cu mmap direct peste fișier (variantă care merge pe Linux,
dar pe Windows n-o să meargă) sau cu alocarea unei pagini goale (în
sensul de mmap cu MAP_ANONYMOUS) + copierea datelor din fișier cu read
sau altceva.

> Mai mult, nu inteleg ce este cu acel "file_size" si a cui proprietate este
> mai exact. A intregului fisier? A unei portiuni de fisier corespunzatoare
> segmentului? Iar daca este a doua varianta, inseamna ca noi ar trebui sa
> copiem de la (size-urile segmentelor precedente + offestul segmentului
> curent)?

E proprietatea segmentului respectiv. Trebuie să copiezi de la
offsetul respectiv + ce mai aduni ca să ajungi la pagina din segment
unde a fost fault-ul. În general nu ai treabă cu celelalte segmente.


More information about the so mailing list