[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: segfault su Debian & su centos 5 no



On 02/01/2013 09:36, Davide Prina wrote:
> sono veramente scettico su questa risposta.
> Secondo me tutto dipende da tantissimi fattori:
> * l'architettura hardware
> * la CPU
> * il compilatore
> * la versione del compilatore
> * i parametri di compilazione
> * le librerie base
> * la versione delle librerie base
> * il gestore di memoria usato
> * il kernel usato
> * ...

Il _momento esatto_ del segfault dipende da alcuni dei parametri che hai
indicato. Il _motivo_ del segfault è quello che ho scritto.

> e dalla loro combinazione.
> 
> On 01/01/2013 21:08, Federico Di Gregorio wrote:
>> On 31/12/2012 12:14, emmanuel segura wrote:
>>> Capisco il tuo consiglio e ti rigranzio, ma comunque non mi spiego
>>> perche su debian a 64 non funziona invece su una debian a 32bit e su
>>> centos 32 bit si
>>
>> Perché la memoria viene assegnata ad un programma in multipli di una
>> pagina (credo 4K). Quindi quando dichiari un array di 1 elemento ed
>> altre variabili il compilatore gli dedica *minimo* 4K.
> 
> così sembra che per ogni variabile lui riservi una pagina. In realtà
> vengono inserite tutti i contenuti delle variabili, fino a
> riempimento... quindi se subito dopo il vettore mette qualche altra
> variabile, allora si avrà che questa verrà modificata.

Guarda il codice che ho allegato. Dimostra _esattamente_ quello che ho
scritto: prevede con precisione il momento in cui il programma farà
segfault partendo dalla posizione della variabile "pa" nella pagina.

Se non sei convinto puoi anche usare objdump sull'eseguibile e guardare
come vengono posizionare le variabili in memoria.

federico

-- 
Federico Di Gregorio                         federico.digregorio@dndg.it
Studio Associato Di Nunzio e Di Gregorio                  http://dndg.it
 In science one tries to tell people, in such a way as to be understood
  by everyone, something that no one ever knew before. But in poetry,
  it's the exact opposite.                                 -- Paul Dirac


Reply to: