作为一个新手,我想,是不是现在不再推荐在装配中使用的主要下划线了?例如:
section .text
global start ;; good
;; global _start ;; bad
start:
也就是说,所有标签都不应该在其名称中没有主要的下划线?它曾经在10 - 30年前使用,但现在不是,对吧?
答案 0 :(得分:2)
如果可能遇到与其他代码的兼容性/互操作性问题(当两者都静态或动态链接在一起)或与工具相关时(例如,当前导下划线在链接器或调试器中具有某些特殊含义/目的时),那么您应遵循您的工具和平台的常见内容。
否则完全取决于你。例如,我编写了一个生成汇编代码的C编译器,然后汇编成ELF目标文件,然后将其与标准库链接在一起。编译DOS,Windows或Linux时,此过程相同。在所有情况下,公共/全局符号都具有前导下划线,即使通常没有ELF文件中的那些也是如此。它们决不会给操作系统带来问题,因为操作系统没有看到这些名称(可执行文件根本不包含符号表,无论如何都不需要执行)。我有自己的链接器和我自己的标准库。我没有像glibc这样的互操作性问题(我在标准库中使用系统调用)。 IOW,在我的编译器周围的小世界中,下划线根本不是问题。如果编译器受欢迎(令人怀疑)并且人们开始以新的,有趣的和无意的方式使用它们,它们可能会成为一个问题。但在那之前,事情才有效。