リターンアドレス

提供: セキュリティ
2014年2月17日 (月) 15:39時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「C言語におけるリターンアドレス とは、関数が呼び出され、その処理を終え、呼び出し元に制御を戻すのアドレス情報です...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

C言語におけるリターンアドレス とは、関数が呼び出され、その処理を終え、呼び出し元に制御を戻すのアドレス情報です。

読み方

リターンアドレス
りたーん あどれす
return address
りたーん あどれす

概要

リターンアドレスは、次に実行するべきプログラムのアドレスを保持しています。 関数ごとにリターンアドレスは、スタックに積まれます。

スタックとリターンアドレス
スタックフレーム スタック
barのスタックフレーム barのローカル領域
ベースポインタ
リターンアドレス
barの引数領域
mainのスタックフレーム mainのローカル領域
ベースポインタ
リターンアドレス
mainの引数領域
_startのスタックフレーム _start ...

リターンアドレスの書き換え

リターンアドレスは、通常、C言語のプログラミングにおいて、プログラマが書き換えるものではありません。

リターンアドレスは、自動変数(ローカル変数)をバッファオーバーランさせてしまうようなコードを書いている場合に、書き換えが可能になります。 攻撃者がシェルコードによって、プログラムの動作を意図的に変更するために、リターンアドレスを変更することがあります。 そのため、バッファを越えて、書き込みをするような関数を呼び出したり、そのようなプログラムを行うべきではありません。

関連項目




スポンサーリンク