Pe scurt: din momentul in care setezi variabila de mediu LD_PRELOAD sa
indice biblioteca ta, orice program care "vede" aceasta variabila ar
trebui sa fie vazut de bibiloteca ta, adica apelurile de io se vor face
prin functiile definite de tine in biblioteca.<br>
<br>
Pe "lung": in sistemul de operare exista o componenta foarte importanta
numita linker/loader. In linux aceasta este implementata de biblioteca
dinamica /lib/ld.so (in cazul formatului executabil a.out), respectiv
/lib/ld-linux.so (in cazul formatului ELF). Rolul linkerului este de a
permite programului tau sa apeleze functii care nu sunt implementate de
tine, ci de o biblioteca partajata. Pe scurt, biblioteca partajata este
mapata in spatiul de adrese programului tau iar executabilului i se
spune la ce adrese sa gasesca functiile de care are nevoie ca sa
functioneze cum trebuie. Tema 2 so se foloseste de faptul ca toate
programele au nevoie sa fie linkate cu libc.so si aproape toate
operatiile de I/E se fac cu apelurile de sistem read/write.<br>
Linkerul verifica o serie de variabile de mediu si fisiere de
configurare. Printre acestea variabila LD_PRELOAD si fisierul
/etc/ld.so.preload. Acestea pot specifica o serie de biblioteci
dinamice ce ar trebui incarcate inaintea altora. In cazul temei
acesteia biblioteca voastra, care implementeaza read si write, vor fi
incarcate inainte libc.so, care de asemenea implementeaza read si
write. Ideea e ca ale tale vor avea precedenta asupra celor "standard",
deci ele vor fi cele apelate in locul celor din libc. Tu poti folosi
acest fapt pentru o sumedenie de chestiuni, de ex tema 2 so. <br>
<br>
Sper ca te-am lamurit cat de cat.<br><br><div><span class="gmail_quote">On 11/19/05, <b class="gmail_sendername">Alecu Andrei</b> <<a href="mailto:aalecu@gmail.com">aalecu@gmail.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Am si eu o mica nelamurire. Procesele a caror stare o determin sunt
rulate de mine? Adica dau eu comanda "ls" spre exemplu intr-un shell si
trebuie sa obtin informatii sau fac un program in care rulez un exec cu
"ls" in el(eventual intr-un fork) si despre acest "ls" trebuie sa aflu
detalii? <br>
<br>
Daca s-ar putea un pic mai multe detalii as fi recunoscator.<br>
<br>
Multumesc, <br><span class="sg">
Andrei ALECU<br>
</span><br>_______________________________________________<br>so mailing list<br><a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br><br><br></blockquote></div><br>