リターンアドレス【return address】

リターンアドレスとは?

プログラムの実行時、関数やサブルーチンの処理が終了した後、呼び出し元の続きから実行を再開するために記録される復帰先の情報のこと。電子メールの分野では配送エラー通知の返送先アドレスを指す場合もある。
リターンアドレスのイメージ画像

プログラム上で関数が呼び出されると、CPUは呼び出し元の次の命令が置かれたメモリ上の位置(アドレス)を「スタック」(stack)と呼ばれるメモリ領域に保存する。関数側の処理が完了すると、CPUスタックからそのアドレスを読み取り、実行をその位置へ移す。これにより、プログラムは関数呼び出しの前後で制御の流れを途切れなく保てる。

同じ関数を異なる箇所から何度呼び出しても、それぞれが正しい位置へ戻れるのは、呼び出しの度に固有のリターンアドレスがスタックに積まれるからである。関数の入れ子呼び出しや再帰呼び出しでも、複数のアドレスが順番にスタックへ積み重なり、処理の終了と共に逆順で取り出される。

スタック上のリターンアドレスは、サイバー攻撃の標的になりやすい。バッファオーバーフロー攻撃では、スタック上のバッファ領域に想定を超えるデータを書き込むことでリターンアドレスを上書きし、関数終了時に不正なコードを実行させる。これに対抗するため、現代のオペレーティングシステム(OS)やコンパイラには「スタックカナリア」や「アドレス空間配置のランダム化」といった防御機構が組み込まれている。

メールのリターンアドレス

電子メールでは、配送エラー発生時にエラー通知を返す宛先をリターンアドレスと呼ぶことがある。SMTPではエンベロープ情報として送信時に指定され、メール本文ヘッダの差出人欄とは独立して管理される。迷惑メール対策においては、このアドレスの偽装が問題になることがあり、送信ドメイン認証技術と組み合わせて検証される場合もある。

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。