<div dir="ltr">Salut!<div><br></div><div>Multumesc pentru clarificari! Am inteles acum ce trebuie facut.</div><div><br></div><div>O zi frumoasa,</div><div>Vlad</div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-04-21 16:14 GMT+03:00 Adrian Șendroiu <span dir="ltr"><<a href="mailto:molecula2788@gmail.com" target="_blank">molecula2788@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Salut,<br>
<span class=""><br>
> Nu imi este foarte clar ce date ar trebui sa copiez mai exact dupa ce am<br>
> facut apelul mmap pe adresa corespunzatoare si cu permisiunile specificate.<br>
> Initial, am crezut ca trebuie sa deschid executabilul in modul read si sa ma<br>
> folosesc de acel "offset" pentru a stii de unde mai exact copiez datele din<br>
> executabil in memorie. Apoi, am observat insa ca exista 2 segmente cu o<br>
> aceeasi valoare pentru offset.<br>
<br>
</span>În urma unui fault tu pornești de la o adresă virtuală - adresa unde<br>
s-a făcut fault-ul. Mai departe poți să obții segmentul care conține<br>
acea adresă. Apoi acel segment are un offset în fișier.<br>
<br>
Punând toate astea cap la cap, trebuie să faci ca în pagina în care<br>
s-a făcut fault să ajungă datele corespunzătoare din fișier. Poți face<br>
asta fie cu mmap direct peste fișier (variantă care merge pe Linux,<br>
dar pe Windows n-o să meargă) sau cu alocarea unei pagini goale (în<br>
sensul de mmap cu MAP_ANONYMOUS) + copierea datelor din fișier cu read<br>
sau altceva.<br>
<span class=""><br>
> Mai mult, nu inteleg ce este cu acel "file_size" si a cui proprietate este<br>
> mai exact. A intregului fisier? A unei portiuni de fisier corespunzatoare<br>
> segmentului? Iar daca este a doua varianta, inseamna ca noi ar trebui sa<br>
> copiem de la (size-urile segmentelor precedente + offestul segmentului<br>
> curent)?<br>
<br>
</span>E proprietatea segmentului respectiv. Trebuie să copiezi de la<br>
offsetul respectiv + ce mai aduni ca să ajungi la pagina din segment<br>
unde a fost fault-ul. În general nu ai treabă cu celelalte segmente.<br>
</blockquote></div><br></div>