H30春午後I問1設問6

ゆきさん  
(No.1)
解答が「ライブラリ関数はデータ実行防止の対象ではないメモリ領域に配置されているから」とのことですが、なぜこのような解答になるのか理解に苦戦しています。これはそもそもライブラリ関数自体に脆弱性がある可能性があるからなのでしょうか。また、ライブラリ関数に対してデータ実行防止を適用することができないからなのでしょうか。
2023.03.27 21:42
pixさん 
SC ダイヤモンドマイスター
(No.2)
OSでのプロセスのメモリ配置についての知識が必要と思われます。

ディスクに格納されているプログラムがOSによってプロセスとなり、メモリに配置
されるとき、以下の5つの領域に分かれて配置されます。
以下、Unix系OSでC言語のプログラムの例です。
・テキスト領域
  プログラムのコードが配置される
・データ領域
  初期化済みデータ、グローバル変数が配置される
・BSS領域
  未初期化データ、サイズのみ決まっている配列などが配置される
・ヒープ領域
  プログラム実行中に動的にメモリを確保(malloc)する際に利用される領域
・スタック領域
  関数の戻り値の格納、ローカル変数が割り当てられる領域

DEP(Data Execution Prevention)は特定のメモリ領域でのコードの実行を
禁止する機能です。対象領域は
・データ領域
・BSS領域
・ヒープ領域
・スタック領域
です。
テキスト領域はそもそも実行するためのコードが格納されているので、DEPの
対象外の領域となります。

ライブラリ関数(共有ライブラリ)はOSからはプログラムとして扱われますので、
テキスト領域に配置されます。そのため、ライブラリ関数はDEPの対象外として
扱われます。
2023.03.27 22:11
ゆきさん  
(No.3)
大変わかりやすい説明をありがとうございます。助かりました。
2023.03.27 22:30

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop