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