
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
Archivio: devel@sikurezza.org Soggetto: Re: [info-request] 386-686 Mittente: gerarra Data: 2 Nov 2003 01:59:31 -0000
> Sui 386: > la memoria puo' essere indirizzata solo in multipli > della "parola" (una parola e' composta da 4 bytes), Non ci siamo. Una word (parola) occupa 16-bits, ovvero 2 bytes. Tu ti riferisci ad una double word. E' importante chiarire questo concetto, vedrai in seguito perche'. > quindi un array da 4 char occupa 1 parola, un array > da 5 char occupa 2 parole e cosi' via, > > Sui 686, vale la stessa regola? Eh direi proprio di si, essendo il 686 IA32. Mantiene tutte le caratteristiche di base degli x86. > pushl %ebp > movl %esp, %ebp > subl $4, %esp > .. > .. > mettendo un array da 1 a 4 ottengo un > subl $4, %esp > > mettendo un array da 5, 6, 7, 9, 10, 11, 12, 13 ,14, 15 0 16 ottengo un > subl $24, %esp > > mettendo un array da 8 ottengo un > subl $8, %esp > > mettendo un array da 17 ottengo un > subl $40, %esp Ora questo e' molto platform-dipendant. Ovvero la corretta gestione dello stack (perche' in questo caso tu stai lavorando nello stack) e' affidata interamente nelle mani del compilatore (in questo caso gcc). Di suo lo stack ti permette semplicemente di scegliere l'unità di boundary fra 16 e 32 bits (quindi fra una word e una dword), ma non puoi pushare più o meno dati alla volta. Il motivo e' semplice. Utilizzando un allineamento sbagliato (visto che x86 ha un data bus a 32 bits), per riassemblare correttamente i 4 bytes necessari da inviare alla memoria avresti bisogno di 2 clock cycles e non più di 1 (come sarebbe naturale) con una pesante perdita di performance. Purtroppo non posso illuminarti sui motivi per cui Gcc allochi cosi tanta memoria allo stack, anche se non necessaria; il primo motivo che mi viene in mente è che lo fa per non appesantire la fase di compilazione. Comunque e' possibile ottenere una allocazione estremamente precisa sullo stack semplicemente con: -mpreferred-stack-boundary=2 al momento dlela compilazione. info gcc o man gcc per maggiori chiarimenti. rookie ________________________________________________________ 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