nasm:允许“global _start:”吗?

时间:2016-03-04 13:14:19

标签: assembly nasm

我的代码如下所示:

section .text

global _start:

_start:

...

如果我用以下代码编译它:

  

nasm -f elf test.asm

我没有错误,在连接后,程序对我有效。

现在的问题是我的导师无法编译我的程序,并且必须删除行global _start:中的“:”才能使其正常工作。

  1. 我怎么能没有错误并且可以编译?
  2. “:”允许/合法,程序应该有效吗?

1 个答案:

答案 0 :(得分:2)

我试图找出NASM可能不会拒绝的原因:

  

GLOBAL与EXTERN一样,允许对象格式定义私有   通过冒号扩展。例如,精灵对象格式   允许您指定全局数据项是函数还是数据:

     

global hashlookup:function, hashtable:data

     

像EXTERN一样,是原始的   GLOBAL的形式与用户级形式的不同之处仅在于它可以   一次只拿一个参数。

- http://www.nasm.us/doc/nasmdoc6.html

所以这只是解析器的一个怪癖。它组装,但我没有检查它汇集到什么。

不要这样做。这显然是错误的,你不应该期望它能起作用。它恰好运气好。在这些情况下一如既往,坚持正常的语法,否则无法获得任何好处。即使你不混淆编译器/汇编器,你也会混淆其他人类读者。