NASM计划分为三个“部分”的技术原因是什么? .data,.bss和.text?幕后真的发生了什么?为什么汇编程序需要提前知道是否存在常量,为什么不随着程序进行它们呢?
答案 0 :(得分:2)
首先,您并不总是需要使用这些部分。您可以在数据部分中包含说明,并在许多系统的文本部分中包含数据。
但是有一些很好的理由可以使用它们。
如果您的操作系统和硬件足够复杂,您可以将某些页面映射为“不可执行”,这样您就可以提供一些保护,防止出现意外跳入数据部分的错误。
同样,您可以将文本部分标记为“只读”,这样您就不会意外地使用错误的指针修改代码。
最后,bss部分只包含零初始化数据,因此在汇编时将其标记为可以减小可执行文件的大小 - 加载器可以在跳转到程序之前设置正确数量的零,而不是占用一堆字节的存储只是为了容纳一堆零。
答案 1 :(得分:0)
我不能代表NASM的设计,但三个部分.text,.bss和.data分别保存代码,初始化变量和未初始化的变量,并在生成的二进制文件中使用适当的访问标志进行映射文件。