[so] [Tema3][Linux] Copiere date din executabil
Vlad Ştefănescu
vlad.a.stefanescu at gmail.com
Sun Apr 22 12:22:59 EEST 2018
Salut!
Multumesc pentru clarificari! Am inteles acum ce trebuie facut.
O zi frumoasa,
Vlad
2018-04-21 16:14 GMT+03:00 Adrian Șendroiu <molecula2788 at gmail.com>:
> 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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20180422/2b67843c/attachment.html>
More information about the so
mailing list