[ Home | Liste | F.A.Q. | Risorse | Cerca... ]


[ Data: precedente | successivo | indice ] [ Argomento: precedente | successivo | indice ]


Archivio: devel@sikurezza.org
Soggetto: RE: [devel] fork e memoria
Mittente: Antonio Parata
Data: Sat,  4 Dec 2004 10:20:14 +0100 (CET)
Quando crei un nuovo processo con una fork(), cio' che viene fatto è una
copia del processo in esecuzione (quindi vengono copiate tutte le variabili
e i vari oggetti).

Siccome è 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' modificando
il figlio non si hanno ripercursioni sul padre.

Le cose cambiano del tutto se usi i thread!

>-- Original Message --
>From: Stefano Di Paola <stefanodipaola@xxxxxxxx>
>To: devel@xxxxxxxxxxxxx
>Date: Mon, 29 Nov 2004 13:34:50 +0100
>Subject: [devel] fork e memoria
>Reply-To: devel@xxxxxxxxxxxxx
>
>
>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=(int *)malloc(sizeof(int));
>  *x=3;
>  x1=2;
>  printf("Parent: before fork x = %d &x=%x  x1=%d &x1=%x\n",
>*x,x,x1,&x1);
>  id = fork();
>  if (id == 0) {
>    printf("Child: id = %d\n", id);
>  printf("Child: x = %d &x=%x x1=%d &x1=%x\n", *x,x,x1,&x1);
>  *x=99;
>  x1=99;
>  printf("Child: x = %d &x=%x x1=%d &x1=%x\n", *x,x,x1,&x1);
>  exit(0);
>  } else {
>  /* we are in the parent */
>  printf("Parent: id = %d\n", id);
>  printf("Parent: wait for child\n");
>  id = wait(NULL);
>  printf("Parent: child terminated pid = %d\n", id);
>  printf("Parent: x = %d &x=%x  x1=%d &x1=%x\n", *x,x, x1,&x1); 
> }
>}
>$ ./forkit
>Parent: before fork x = 3 &x=80498f0  x1=2 &x1=bffff6fc
>Parent: id = 6823
>Parent: wait for child
>Child: id = 0
>Child: x = 3 &x=80498f0 x1=2 &x1=bffff6fc
>Child: x = 99 &x=80498f0 x1=99 &x1=bffff6fc
>Parent: child terminated pid = 6823
>Parent: x = 3 &x=80498f0  x1=2 &x1=bffff6fc
>
>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






[ Home | Liste | F.A.Q. | Risorse | Cerca... ]

www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005