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