「リターンアドレス」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「C言語におけるリターンアドレス とは、関数が呼び出され、その処理を終え、呼び出し元に制御を戻すのアドレス情報です...」)
 
(相違点なし)

2014年2月17日 (月) 15:39時点における最新版

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

読み方

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

概要

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

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

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

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

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

関連項目