Attualmente sto smontando alcuni piccoli programmi in C realizzati in Visual Studio 2012 Express e ho notato una tendenza tra i file binari.Perché lo stack è pieno di 0xCCCCCCCC
La prima serie di istruzioni eseguite nella funzione principale sono sempre:
SUB ESP,154 ; Doesn't have to be 0x154.
.....
.....
.....
LEA EDI,DWORD PTR SS:[EBP-154]
MOV ECX,55 ; Also doesn't have to be 0x55.
MOV EAX,CCCCCCCC
REP STOS DWORD PTR ES:[EDI]
Così, perché la macchina riempire lo stack con questo 0xCCCCCCCC? Ho letto che è usato da VC++, o qualcosa del genere, come un marchio per lo spazio non inizializzato?
Allora diciamo che sto per mettere qualcosa dentro il mio tampone ... Il compilatore o un processore decide di mettere a un certo punto a caso all'interno di questo spazio, ma non riesco a vedere il motivo per cui sarebbe messo lì. ..
EBP-90 > CCCCCCCC ÌÌÌÌ
EBP-8C > CCCCCCCC ÌÌÌÌ
EBP-88 > CCCCCCCC ÌÌÌÌ
EBP-84 > 00000001 ... ; Why this place?
EBP-80 > CCCCCCCC ÌÌÌÌ
EBP-7C > CCCCCCCC ÌÌÌÌ
EBP-78 > 41414141 AAAA ; Why this far from both the top and bottom of the stack?
EBP-74 > CCCCCC00 .ÌÌÌ
EBP-70 > CCCCCCCC ÌÌÌÌ
EBP-6C > CCCCCCCC ÌÌÌÌ
e ...
EBP-14 > CCCCCCCC ÌÌÌÌ
EBP-10 > CCCCCCCC ÌÌÌÌ
EBP-C > 00000000 .... ; Why here?
EBP-8 > CCCCCCCC ÌÌÌÌ
EBP-4 > 7EA7D069 iЧ~ ; I think this is some stack cookie stuff.
EBP ==> >/0017FEA8 ¨þ. ; Saved EBP.
scontata la dwords 1 e 0 sono memorizzati qui è a causa di qualche istruzioni if, ma sto semplicemente chiedendo perché essi sono posti dove sono. Se c'è una logica dietro di esso.
Grazie.
Creazione ottimizzata o di debug? –
@KerrekSB Penso che sia effettivamente in fase di debug ... Non l'ho mai notato, ora che lo hai fatto notare. – Volatile
Se si fosse un compilatore di debug, si può immaginare che uso possa avere un "modello prevedibile"? –