2011-01-16 33 views
2

実行ファイルをロードするときに、コード、データ、bssなどのセグメントをメモリに配置する必要があります。標準のx86のどこにlibcライブラリが置かれているのか誰かが私に教えてもらえれば驚いています。それはメモリの最上部か最下部かです。私の推測では、アプリケーションコードに近い下、すなわちである、それはここではこのようなものになります。実行可能ファイルのメモリレイアウト

--------- 0x1000 
Stack 
    | 
    V 

^
    | 
Heap 
---------- 
Data + BSS 
---------- 

App Code 

---------- 

libc 

---------- 0x0000 

どうもありがとう、それはローダーの気まぐれに依存 ロス

答えて

4

を。

特に、ASLRを使用する現代のシステムでは、特定のライブラリがどこで終了するのか予測できません。

+0

ローダーがメモリのローエンドに配置する可能性があります。私はスタックがメモリの一番上に固定され、成長すると仮定しますが、ヒープは次に成長します。しかし、他のセグメントについてはわからない。 – Ross

+0

@Ross:メモリの最下部に「常に」置かれていれば、任意のランダム化のポイントを打ち負かし、return-to-libc攻撃を自明にします。さらに、あなたの前提はかなり根拠がない - プロセスには多数のスレッドがあり、各スレッドには独自のスタックがあります。あなたが特定のシステムに興味があるなら、そのシステムについて尋ねます - 一般的な答えはありません。 –

関連する問題