Re: fork e memoria
"Gabriele Burattini" <gabriele.burattini-JJY9+s/[email protected]> Fri, 3 Dec 2004 22:40:18 +0100
| Newsgroups | gmane.comp.security.italian.devel |
|---|---|
| Organization | FaberSoft srl |
| Message-ID | <[email protected]> |
Saluti a tutti,
mi presento :
mi chiamo Gabriele Burattini e seguo la mail-list da tempo ...
Avendo usato il C parecchi ani fa mi sento di rispondere al problema
sollevato da Stefano ...
Quando si fa fork() il S.O. crea un nuovo processo nella tabella dei
processi,
il processo figlio condivide con il padre l'area del codice e dei dati
ovvero le variabili dichiarate "static" in C ; ma non lo stack di
esecuzione
che viene creato ex-novo.
Le variabili da te usate sono tutte (mi sembra) di tipo dinamico ovvero
allocate nello stack e quindi non sono condivise.
Spero di essere stato di aiuto ..
Ciao a tutti i listaroli
Gabriele
----- Original Message -----
From: "Stefano Di Paola" <[email protected]>
To: <[email protected]>
Sent: Monday, November 29, 2004 1:34 PM
Subject: [devel] fork e memoria
> 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
________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List