「ハッキング: 搾取の技術」という本を読んでいて、次の段落に出くわしました。
execl() では既存の環境を使用しますが、execle() を使用すると環境全体を指定できます。環境配列が最初の文字列 (リストを終了するための NULL ポインターを含む) としての単なるシェルコードである場合、唯一の環境変数はシェルコードになります。これにより、アドレスの計算が容易になります。Linux では、アドレスは 0xbffffffa から環境内のシェルコードの長さを引いて、実行されたプログラムの名前の長さを引いたものになります。このアドレスは正確であるため、NOP スレッドは必要ありません。
環境を指定するとはどういう意味ですか?
さまざまな環境を分類するものは何ですか?
環境変数のアドレスがそのように計算されるのはなぜですか (または、より具体的には、ベース アドレスが 0xbffffffa である理由)?
execle() の代わりに execl() 関数を使用した場合、シェルコード環境変数を使用できなかったのでしょうか?