为什么NA​​SM计划分为3个部分?

时间:2013-02-27 01:50:01

标签: assembly nasm conceptual

NASM计划分为三个“部分”的技术原因是什么? .data,.bss和.text?幕后真的发生了什么?为什么汇编程序需要提前知道是否存在常量,为什么不随着程序进行它们呢?

2 个答案:

答案 0 :(得分:2)

首先,您并不总是需要使用这些部分。您可以在数据部分中包含说明,并在许多系统的文本部分中包含数据。

但是有一些很好的理由可以使用它们。

  1. 如果您的操作系统和硬件足够复杂,您可以将某些页面映射为“不可执行”,这样您就可以提供一些保护,防止出现意外跳入数据部分的错误。

  2. 同样,您可以将文本部分标记为“只读”,这样您就不会意外地使用错误的指针修改代码。

  3. 最后,bss部分只包含零初始化数据,因此在汇编时将其标记为可以减小可执行文件的大小 - 加载器可以在跳转到程序之前设置正确数量的零,而不是占用一堆字节的存储只是为了容纳一堆零。

答案 1 :(得分:0)

我不能代表NASM的设计,但三个部分.text,.bss和.data分别保存代码,初始化变量和未初始化的变量,并在生成的二进制文件中使用适当的访问标志进行映射文件。