NASM程序分爲三個「部分」的技術原因是什麼? .data,.bss和.text?幕後真正發生了什麼?爲什麼彙編程序需要事先知道是否有常量,爲什麼不在程序運行時將它們帶走呢?爲什麼NASM程序分爲3個部分?
2
A
回答
2
首先,您並不總是需要使用這些部分。您可以在數據部分包含說明,並在大量系統的文本部分中包含數據。
雖然有一些很好的理由讓他們。
如果你的操作系統和硬件都足夠成熟,可以映射某些網頁「不可執行」,這樣可以提供從那裏你跳進數據部分意外的錯誤一定的保護。
同樣,您可以將文本部分標記爲「只讀」,這樣您就不會意外地用錯誤的指針修改代碼。
最後,bss部分只包含零初始化的數據,因此在彙編時標記它可以減少可執行文件的大小 - 加載器可以在跳入程序之前mem對正確數量的零進行memset設置,而不是佔用大量的存儲空間來保存一堆零。
0
我不能說NASM的設計,但三段.text,.bss和.data分別保存代碼,初始化變量和未初始化變量,並在結果中使用適當的訪問標誌進行映射二進制文件。
相關問題
- 1. 分離文本分爲3個部分
- 2. Tableau - 將數據分爲3個部分
- 3. 識別NA部分
- 4. 爲什麼內部程序?
- 5. 爲什麼將設計模式分爲三部分?
- 6. 拆分爲兩個部分
- 7. 爲什麼不工作COL-SM-6 IE7 +
- 8. 爲什麼Uri部分解碼查詢部分?
- 9. 爲什麼分配
- 10. 爲什麼flexslider出現在部分
- 11. Javadoc「使用」部分 - 爲什麼缺少?
- 12. 爲什麼SKSpriteNodes只能部分渲染?
- 13. 爲什麼位置部分不工作?
- 14. 爲什麼視圖部分顯示?
- 15. 部分課程是什麼?
- 16. 爲什麼在這個程序中出現分段錯誤?
- 17. 這個程序爲什麼會出現分段錯誤?
- 18. 內存分配:爲什麼這個C程序有效?
- 19. 分割線分爲兩個部分
- 20. 分裂陣列分爲兩個部分
- 21. NGen爲部分信任應用程序
- 22. 爲什麼e1071會給我這個Naive Bayes分類器預測的NA?
- 23. 將具有多個分隔符的字符串拆分爲3個部分
- 24. 爲什麼javax.servlet包僅作爲應用程序服務器的一部分進行分發?
- 25. 爲什麼JSON序列化返回一個部分反序列化的對象?
- 26. 爲什麼在調用它之前爲事件分配一個處理程序?
- 27. 爲部分渲染javascript - Rails 3
- 28. 爲什麼此代碼的線程部分不運行
- 29. 什麼是'多部分標識符',爲什麼不能綁定?
- 30. 分割錯誤。爲什麼?
我以爲bss部分包含所有未初始化的變量? – CodyBugstein 2013-02-27 23:12:04
就C而言,例如,只有本地人可以被初始化,並且由於局部變量在堆棧上,這沒有任何意義。 – 2013-02-27 23:45:20