已知.bss段不存儲在磁盤中,但內存中的.bss段應初始化爲零。但它在內存中應該在哪裏? ELF標題中是否顯示任何信息,或者.bss部分是否可能顯示在數據部分的旁邊,或其他內容?ELF文件的.bss節應該在哪裏進入內存?
8
A
回答
10
知道在哪裏BSS段會在內存中,它足以運行readelf -S program
,並檢查Addr列.bss
行。
在大多數情況下,你也將看到初始化數據段(.data
)立即之前。也就是說,你會看到地址+尺寸的.data
部分的的.bss
段的起始地址相匹配。
但是,情況並非總是如此。這些都是歷史慣例,並且ELF specification(與平臺相關的補充文件一起閱讀,例如32-bit x86 machines中的第5章)允許更復雜的配置,並不是所有配置都受Linux支持。
例如,部分不得稱爲.bss
可言。唯一2個特性,使得一個BSS部分如:
- 的部分標有
SHT_NOBITS
(即,它需要空間在存儲器中,但沒有上的存儲),這顯示爲在readelf
的輸出NOBITS
。 - 它映射到可加載(
PT_LOAD
),可讀(PF_R
)和可寫(PF_W
)段。存儲器中的這種段也比存儲器中短(p_filesz
<p_memsz
)。
你可以有多個BSS部分:PowerPC的可執行文件可能有未初始化的數據變量.sbss
和.sbss2
。
最後,BSS部不一定是相鄰的數據段或堆。如果您檢查Linux kernel(更特別是load_elf_binary
函數),您可以看到BSS部分(或更確切地說,它映射到的segment)甚至可能與代碼和初始化數據交錯。 Linux內核設法對此進行分類。
14
BSS是數據和堆之間,如在this marvelous article詳述。
可以使用size
找出各部分的尺寸:
[email protected]:~$ size try
text data bss dec hex filename
1108 496 16 1620 654 try
相關問題
- 1. ELF文件的哪些部分應該加載到內存中?
- 2. 我應該在哪裏保存文件
- 3. elf文件中的析構函數的位置:不應該在哪裏?
- 4. C++將ELF文件中的類變量保存在哪裏?
- 5. ELF文件中的導入表在哪裏?
- 6. 我的緩存守護進程應該在哪裏生存?
- 7. 這個文件應該在哪裏?
- 8. 「.htaccess」文件應該放在哪裏?
- 9. forms.py文件應該放在哪裏?
- 10. Preferences .xml文件應該放在哪裏?
- 11. ASP.NET應用程序應該在哪裏存儲數據文件?
- 12. 我應該在哪裏上傳github分支的內置文件?
- 13. 我應該在哪裏保存序列化的數據文件?
- 14. 我的Azure雲服務存儲文件應該放在哪裏?
- 15. 你應該在哪裏保存你的IIS文件
- 16. 我應該在哪裏存儲CSS文件在SharePoint安裝?
- 17. 哪裏是在該C內存泄漏++?
- 18. 我應該在哪裏顯示或存儲從文件導入的數據?
- 19. 我應該在哪裏保存TestNG配置測試文件
- 20. FMDataBase - 我應該在哪裏存儲數據庫文件?
- 21. 我應該在哪裏保存數據庫文件?
- 22. 我應該在哪裏存儲許可證文件?
- 23. 我應該在哪裏存儲M2Crypto文件
- 24. 我應該在哪裏保存一個ini文件?
- 25. 我應該在哪裏保存批處理文件
- 26. 哪裏應該存儲css文件在virtualmin laravel
- 27. duply/duplicity - 我應該在哪裏保存配置文件數據?
- 28. 我應該在哪裏存儲配置文件?
- 29. 我應該在哪裏將函數放入管道文件中?
- 30. 我應該在哪裏存儲len(list)?
沒錯+1的那篇文章確實ü發佈一個偉大的 – abhi
+1你還在32位的爺爺? – JeremyP
等待所有64位炒作結束:-)) – cnicutar