2014-02-06 37 views

回答

0

.section伪似乎是指令的定义与名称和/或标志一节有什么区别。 .data是初始化数据的预定义部分。

这只是一个猜测,但我认为.section .data可能是一个接一个的两个部分:第一个是没有标记且没有内容的未命名,另一个是.data部分。

+0

根据'objdump','.section伪.data'创建名为'.data'单个部分从源结束。 –

0

为什么大写?

大会的指示似乎基于为区分大小写:

  • 快速编译测试
  • docs saying“这个名字的其余部分是字母,通常是小写。”
  • 我在read.c
    • 源的解释这binutils的使用上都指示和指令TOLOWER如果TC_CASE_SENSITIVE未定义
    • git grep说是所有archs的情况下,除了metag 2.25

现在为.data vs .section .data

文档

docs for .section说:

此指令仅支持实际支持任意命名段的目标;例如,对于a.out目标,即使使用标准的a.out部分名称,也不会被接受。

所以这是不太便携,更可配置的,因为你可以通过自定义的标志,以它的论据

.section name [, "flags"[, @type[,flag_specific_arguments]]] 

实证检验

一个快速检查,以控制截面属性GAS 2.24 ELF Linux x86-64显示它们为简单输入提供相同的输出:

aS:

.data 
    i: .int 1 

b。S:

.section .data 
    i: .int 1 

比较:

as -o a.o a.S 
as -o b.o b.S 
cmp a.o b.o 
echo $? 

的源代码

对于ELF,.section它是由config/obj-elf.c#obj_elf_section()

.data处理由read.c#s_data处理。

TODO:如果.section .data不带任何参数确实相同.data或不

相关问题