セキュリティの勉強をしている学生です。
いままではどのようにコードを書くかということしか考えていませんでしたが、オーバーフローなどの実践をするためにメモリを意識してC言語を書いています。
ひとまず書いたコードから
C
1#include <stdio.h> 2 3int main(){ 4 int a; 5 int buffer[10]; 6 7 printf("a : %p\n", &a); 8 printf("buffer : %p\n", buffer); 9 10 return 0; 11}
bash
1$ ./a.out 2a : 0x7fff57f35a08 3buffer : 0x7fff57f35a10
C
1#include <stdio.h> 2 3int main(){ 4 int buffer[10]; 5 int b; 6 7 printf("b : %p\n", &b); 8 printf("buffer : %p\n", buffer); 9 10 return 0; 11}
bash
1$ ./a.out 2b : 0x7fff58186a08 3buffer : 0x7fff58186a10
変数の宣言の順番を変えてそのアドレスを出力するだけのプログラムです。
自分が読んだサイトによると、ローカル変数はスタックに積まれるので、宣言の順番によってそれらのアドレスが変わるとなっており、そう理解しました。
が、Macで上記の2コードの出力を見ると、どちらも順番がおなじになっています。
ちなみにVagrantのCentOS7では、予想通り2つのコードで順番が変わりました。
どちらのOSでもgccを使いました。
コンパイル時はどちらもオプションなしです。
なぜMacではうまくいかないんでしょうか?
最適化のようなものが働いているんでしょうか?
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/08 15:08