GNU GAS中“.SECTION .data”和“.data”有什么区别?

时间:2014-02-06 15:14:03

标签: assembly gas

似乎两者都在发挥作用。

.SECTION是什么意思?为什么它是大写的?

我找不到gdb'info文件'或'反汇编主'

的任何区别

2 个答案:

答案 0 :(得分:1)

为什么它是大写的?

汇编指令似乎不区分大小写,基于:

  • 快速编译测试
  • docs saying“名称的其余部分是字母,通常是小写字母。”
  • 我对read.c来源的解释
    • 如果TOLOWER未定义,则对指令和说明使用TC_CASE_SENSITIVE
    • git grep所说的所有拱门除了binutils 2.25中的metag以外的情况

现在适用于.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显示它们为简单输入提供相同的输出:

A.S:

.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,.sectionconfig/obj-elf.c#obj_elf_section()

处理

.dataread.c#s_data处理。

TODO:如果.section .data没有任何参数与.data相同而不是

,那么从源头得出结论

答案 1 :(得分:0)

.section似乎是用于定义带有名称和/或标志的部分的指令。 .data是初始化数据的预定义部分。

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