C言語で
とある自作関数内に以下のローカル変数を宣言しました。
int auto_flag = 0;
char buffer[16];
これを逆の順番で宣言したら、スタック領域内にPUSHされる順番も変わりますよね?
char buffer[16];
int auto_flag = 0;
と逆順に宣言してgdbで
x64xw $rsp
とやって中身を覗いたら、PUSHされている順番が逆になっていなかったのです!
最初の中身
(gdb) x/x &auto_flag
0x7fffffffe62c: 0x00
(gdb) x/s buffer
0x7fffffffe610: "\260\a@"
auto_flag → bufferとなっていますよね・・・
逆順の中身
(gdb) x/s buffer
0x7fffffffe620: "\260\a@"
(gdb) x/x &auto_flag
0x7fffffffe63c: 0x00
auto_flag → buffer となっています・・・・
PUSHされる順番が逆になっていません。
最適化した時としない時でみてみたのですが、かわりませんでした。
なぜでしょうか?
Linux 64bit です。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/24 07:31