現在、Visual Studio 2012 Express で作成されたいくつかの小さな C プログラムを逆アセンブルしていますが、バイナリ間の傾向に気付きました。
メイン関数で実行される命令の最初のセットは常に次のとおりです。
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]
では、なぜマシンはこの 0xCCCCCCCC でスタックを埋めるのでしょうか? 初期化されていないスペースのマークとして、VC ++などで使用されていることを読みましたか?
次に、バッファ内に何かを配置するとします...コンパイラまたはプロセッサは、このスペース内のランダムなポイントに配置することを決定しますが、なぜそこに配置するのかわかりません...
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 ÌÌÌÌ
と...
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.
1 と 0 の dword がここに格納されているのは、いくつかの if ステートメントのためですが、なぜそれらがどこに配置されているのか疑問に思っています。その背後に何らかのロジックがある場合。
ありがとうございました。