现在不推荐在标签中使用前导下划线?
The leading underscore not recommended nowadays for labels?
作为新手,我想知道,现在汇编中是否不建议使用前导下划线了?例如:
section .text
global start ;; good
;; global _start ;; bad
start:
也就是说,所有标签的名称中都不应该有前导下划线? 10-30年前还用过,现在不用了吧?
如果有可能 运行 进入 compatibility/interoperability 问题与其他代码(当两者静态或动态链接在一起时)或与工具(例如,当前导下划线有一些特殊的 meaning/purpose 在链接器或调试器中),那么您应该遵循您的工具和平台的通用性。
否则完全取决于您。例如,我编写了一个生成汇编代码的 C 编译器,然后将其汇编成 ELF 目标文件,然后将其与标准库链接在一起。为 DOS、Windows 或 Linux 编译时,此过程相同。在所有情况下,public/global 符号都有前导下划线,尽管在 ELF 文件中通常没有下划线。它们绝不会给 OS 带来问题,因为 OS 看不到这些名称(可执行文件根本不包含符号表,无论如何执行都不需要符号表)。我有我自己的链接器和我自己的标准库。我与 glibc 之类的东西没有互操作性问题(我在我的标准库中使用系统调用)。 IOW,在我的编译器周围的小世界中,下划线根本不是问题。如果编译器变得流行(值得怀疑)并且人们开始以新的、有趣的和意想不到的方式使用它,它们可能会成为一个问题。但在那之前一切正常。
作为新手,我想知道,现在汇编中是否不建议使用前导下划线了?例如:
section .text
global start ;; good
;; global _start ;; bad
start:
也就是说,所有标签的名称中都不应该有前导下划线? 10-30年前还用过,现在不用了吧?
如果有可能 运行 进入 compatibility/interoperability 问题与其他代码(当两者静态或动态链接在一起时)或与工具(例如,当前导下划线有一些特殊的 meaning/purpose 在链接器或调试器中),那么您应该遵循您的工具和平台的通用性。
否则完全取决于您。例如,我编写了一个生成汇编代码的 C 编译器,然后将其汇编成 ELF 目标文件,然后将其与标准库链接在一起。为 DOS、Windows 或 Linux 编译时,此过程相同。在所有情况下,public/global 符号都有前导下划线,尽管在 ELF 文件中通常没有下划线。它们绝不会给 OS 带来问题,因为 OS 看不到这些名称(可执行文件根本不包含符号表,无论如何执行都不需要符号表)。我有我自己的链接器和我自己的标准库。我与 glibc 之类的东西没有互操作性问题(我在我的标准库中使用系统调用)。 IOW,在我的编译器周围的小世界中,下划线根本不是问题。如果编译器变得流行(值得怀疑)并且人们开始以新的、有趣的和意想不到的方式使用它,它们可能会成为一个问题。但在那之前一切正常。