NASM程序分爲三個「部分」的技術原因是什麼? .data,.bss和.text?幕後真正發生了什麼?爲什麼彙編程序需要事先知道是否有常量,爲什麼不在程序運行時將它們帶走呢?爲什麼NASM程序分爲3個部分?
2
A
回答
2
首先,您並不總是需要使用這些部分。您可以在數據部分包含說明,並在大量系統的文本部分中包含數據。
雖然有一些很好的理由讓他們。
如果你的操作系統和硬件都足夠成熟,可以映射某些網頁「不可執行」,這樣可以提供從那裏你跳進數據部分意外的錯誤一定的保護。
同樣,您可以將文本部分標記爲「只讀」,這樣您就不會意外地用錯誤的指針修改代碼。
最後,bss部分只包含零初始化的數據,因此在彙編時標記它可以減少可執行文件的大小 - 加載器可以在跳入程序之前mem對正確數量的零進行memset設置,而不是佔用大量的存儲空間來保存一堆零。
0
我不能說NASM的設計,但三段.text,.bss和.data分別保存代碼,初始化變量和未初始化變量,並在結果中使用適當的訪問標誌進行映射二進制文件。
相關問題
- 1. 分離文本分爲3個部分
- 2. 爲什麼NASM會說「錯誤:逗號或行結束符」?
- 3. Tableau - 將數據分爲3個部分
- 4. 頁面爲什麼分成兩部分?
- 5. 識別NA部分
- 6. 爲什麼內部程序?
- 7. Haskell部分應用程序似乎不適用於。爲什麼?
- 8. 爲什麼不是Haskell部分應用程序工作?
- 9. 將應用程序配置的appsetting部分分爲兩部分
- 10. 拆分XML字符串在Java中分爲3個部分
- 11. 爲什麼.NET Framework 4分爲兩部分?
- 12. 爲什麼將設計模式分爲三部分?
- 13. 爲什麼Joomla將MVC視圖分爲兩部分
- 14. 爲什麼在R中差分之後子集中的NA值?
- 15. 爲什麼第一部分打印4而不是3數字?
- 16. 爲什麼這個程序給我一個「分段錯誤」?
- 17. 拆分爲兩個部分
- 18. 爲什麼不工作COL-SM-6 IE7 +
- 19. 爲什麼objcopy排除一個部分而不是另一個部分?
- 20. 爲什麼分配
- 21. 爲什麼Uri部分解碼查詢部分?
- 22. 部分代碼被忽略 - 爲什麼?
- 23. 爲什麼這部分html不可見?
- 24. 爲什麼視圖部分顯示?
- 25. 爲什麼位置部分不工作?
- 26. 爲什麼flexslider出現在部分
- 27. 爲什麼Actor.receive是部分函數?
- 28. Javadoc「使用」部分 - 爲什麼缺少?
- 29. 爲什麼SKSpriteNodes只能部分渲染?
- 30. 爲什麼React更新這部分DOM?
我以爲bss部分包含所有未初始化的變量? – CodyBugstein 2013-02-27 23:12:04
就C而言,例如,只有本地人可以被初始化,並且由於局部變量在堆棧上,這沒有任何意義。 – 2013-02-27 23:45:20