2013-02-27 20 views

回答

2

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

虽然有一些很好的理由让他们。

  1. 如果你的操作系统和硬件都足够成熟,可以映射某些网页“不可执行”,这样可以提供从那里你跳进数据部分意外的错误一定的保护。

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

  3. 最后,bss部分只包含零初始化的数据,因此在汇编时标记它可以减少可执行文件的大小 - 加载器可以在跳入程序之前mem对正确数量的零进行memset设置,而不是占用大量的存储空间来保存一堆零。

+0

我以为bss部分包含所有未初始化的变量? – CodyBugstein 2013-02-27 23:12:04

+0

就C而言,例如,只有本地人可以被初始化,并且由于局部变量在堆栈上,这没有任何意义。 – 2013-02-27 23:45:20

0

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