リターンアドレス
提供: セキュリティ
スポンサーリンク
C言語におけるリターンアドレス とは、関数が呼び出され、その処理を終え、呼び出し元に制御を戻すのアドレス情報です。
読み方
- リターンアドレス
- りたーん あどれす
- return address
- りたーん あどれす
概要
リターンアドレスは、次に実行するべきプログラムのアドレスを保持しています。 関数ごとにリターンアドレスは、スタックに積まれます。
| スタックフレーム | スタック |
|---|---|
| barのスタックフレーム | barのローカル領域 |
| ベースポインタ | |
| リターンアドレス | |
| barの引数領域 | |
| mainのスタックフレーム | mainのローカル領域 |
| ベースポインタ | |
| リターンアドレス | |
| mainの引数領域 | |
| _startのスタックフレーム | _start ... |
リターンアドレスの書き換え
リターンアドレスは、通常、C言語のプログラミングにおいて、プログラマが書き換えるものではありません。
リターンアドレスは、自動変数(ローカル変数)をバッファオーバーランさせてしまうようなコードを書いている場合に、書き換えが可能になります。 攻撃者がシェルコードによって、プログラムの動作を意図的に変更するために、リターンアドレスを変更することがあります。 そのため、バッファを越えて、書き込みをするような関数を呼び出したり、そのようなプログラムを行うべきではありません。
関連項目
- セキュアプログラミング
- C言語
- スタック
- スタックフレーム
- リターンアドレス
- ベースポインタ
ツイート
スポンサーリンク