質問するログイン新規登録

回答編集履歴

1

未修正反映

2017/05/13 23:22

投稿

naomi3
naomi3

スコア1105

answer CHANGED
@@ -1,8 +1,9 @@
1
1
  皆さんのおっしゃっている通り、変数がどこに配置されるかは処理系依存です。
2
2
  ただ、オートマチック変数は、その特性上、すなわち、関数の呼び出し順に割り当てられ、呼び出しと逆順に解放されるため、レジスタに割り当てられるものを除いて、スタックに割り当てられることが極めて多いです。
3
3
 
4
- 1回の関数呼び出しで作られるスタック上の領域を**スタックフレーム**(構造体のようなもの)と呼びます。スタックフレームには、引数、リターンアドレス(関数から戻った後に実行されるコードのアドレス)、呼び出し元の関数の、オートマチック変数が含まれます。
4
+ 1回の関数呼び出しで作られるスタック上の領域を**スタックフレーム**(構造体のようなもの)と呼びます。スタックフレームには、引数、リターンアドレス(関数から戻った後に実行されるコードのアドレス)、呼び出し元の関数のスタックフレームのアドレス(フレームポインタ)、オートマチック変数が含まれます。
5
5
 
6
+ 7FABD759D127は、リターンアドレスではないでしょうか。コードの領域とスタックの領域はかなり離れていますから。
6
7
 
7
8
  > ちなみに、大部分は以下のようなコードがが占めています。
8
9
  printf "\x25\x78\x2c\n"