2

私はシステムの下位レベルの仕組みを調査しておりmalloc、ヒープの開始アドレスをどのように決定するのか疑問に思っていました。ヒープは一定のオフセットにありますか、それとも開始アドレスを取得するための何らかの呼び出しがありますか? スタックはヒープの開始アドレスに影響しますか?

4

2 に答える 2

3

sbrkは、追加 (または削除) するバイトの開始アドレスを返します。ヒープがまだ割り当てられていない新しいプロセスでは、sbrkへの最初の呼び出しは、ヒープの「ブレーク」セクションの開始アドレスを返す必要があります。あえて言うなら、 brk/sbrkを使用するmallocの実装はおそらく最初の実行でそうなるでしょう。

于 2011-02-19T22:09:31.150 に答える
1

従来、ヒープはテキスト セクションのすぐ上から始まり、成長していきました。スタック フレームは、マップされていない 0 ページに向かって成長するため、開始アドレスにまったく影響しませんでした。ただし、最近ではより一般的です

  1. エクスプロイトがメモリ内の正しいアドレスに到達するのを困難にするために、ランダム化される最初のアドレス
  2. 通常、仮想アドレス空間内の任意の場所のアドレスを取得するためのmalloc()呼び出しだけであるため、ヒープは連続していません。mmap()
于 2010-04-28T04:54:57.320 に答える