RE: fork e memoria
"Antonio Parata" <[email protected]> Sat, 4 Dec 2004 10:20:29 +0100
| Newsgroups | gmane.comp.security.italian.devel |
|---|---|
| Message-ID | <[email protected]> |
Quando crei un nuovo processo con una fork(), cio' che viene fatto =E8 un= a copia del processo in esecuzione (quindi vengono copiate tutte le variabi= li e i vari oggetti). Siccome =E8 una copia esatta del processo padre, ti da' la senzazione di = avere lo stesso spazio di memoria (ma in verita' non e' cosi), ecco perche' mod= ificando il figlio non si hanno ripercursioni sul padre. Le cose cambiano del tutto se usi i thread! >-- Original Message -- >From: Stefano Di Paola <[email protected]> >To: [email protected] >Date: Mon, 29 Nov 2004 13:34:50 +0100 >Subject: [devel] fork e memoria >Reply-To: [email protected] > > >Ciao a tutti, > >sto facendo un po' di ricerca sugli aspetti di sicurezza della fork. >Non capisco una cosa. Come mai quando debuggo un processo figlio >vedo lo stesso spazio di memoria del padre ma una modifica da parte del >processo figlio non e' rilevato dal processo padre? >Ad es.: >//forkit.c >void main(int argc, char **argv) >{ > pid_t id; > int *x , x1; > x=3D(int *)malloc(sizeof(int)); > *x=3D3; > x1=3D2; > printf("Parent: before fork x =3D %d &x=3D%x x1=3D%d &x1=3D%x\n", >*x,x,x1,&x1); > id =3D fork(); > if (id =3D=3D 0) { > printf("Child: id =3D %d\n", id); > printf("Child: x =3D %d &x=3D%x x1=3D%d &x1=3D%x\n", *x,x,x1,&x1); > *x=3D99; > x1=3D99; > printf("Child: x =3D %d &x=3D%x x1=3D%d &x1=3D%x\n", *x,x,x1,&x1); > exit(0); > } else { > /* we are in the parent */ > printf("Parent: id =3D %d\n", id); > printf("Parent: wait for child\n"); > id =3D wait(NULL); > printf("Parent: child terminated pid =3D %d\n", id); > printf("Parent: x =3D %d &x=3D%x x1=3D%d &x1=3D%x\n", *x,x, x1,&x1); = > } >} >$ ./forkit >Parent: before fork x =3D 3 &x=3D80498f0 x1=3D2 &x1=3Dbffff6fc >Parent: id =3D 6823 >Parent: wait for child >Child: id =3D 0 >Child: x =3D 3 &x=3D80498f0 x1=3D2 &x1=3Dbffff6fc >Child: x =3D 99 &x=3D80498f0 x1=3D99 &x1=3Dbffff6fc >Parent: child terminated pid =3D 6823 >Parent: x =3D 3 &x=3D80498f0 x1=3D2 &x1=3Dbffff6fc > >Saluti e grazie in anticipo! >Stefano > >-------------------------------- >Stefano Di Paola >Ingegnere Informatico >Email: stefano.dipaola_at_wisec.it >Web: http://www.wisec.it > >-------------------------------- > >________________________________________________________ >http://www.sikurezza.org - Italian Security Mailing List ________________________________________________________ http://www.sikurezza.org - Italian Security Mailing List