2012-11-21 31 views
1

readelf -l /bin/ls爲什麼精靈段不是頁面對齊的?

LOAD   0x000000 0x08048000 0x08048000 0x18ff8 0x18ff8 R E 0x1000 
    LOAD   0x019eec 0x08061eec 0x08061eec 0x003f4 0x01014 RW 0x1000 

所以這兩個節之間的邊界頁只讀和可讀寫,這怎麼可能?

回答

2

假設4096(0×1000)個字節的頁大小和舍入地址頁面粒度:

  • 第一可裝入段將使用的地址範圍[0x8048000--0x8060FFF],兩端以下。
  • 第二個可加載段將使用地址範圍[0x8061000--0x8062FFF],其中從地址0x8061EEC開始的0x3F4字節將來自可執行文件,其餘的文件在加載時將被填滿。

沒有重疊。

+0

爲什麼第二個分段從ox8061000開始? – user1608776

+0

@ user1608776好問題。您可能需要查看'/ bin/ls'的鏈接器映射來確定位於偏移量0x8061000和0x8061EEC之間的數據。查看更簡單(hello world)可執行文件的鏈接器映射,相應的偏移量範圍似乎用於名爲'.tdata','.tbss'和'.gcc_except_table'的節。 – jkoshy