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