section 伪操作
用户可以通过 .section伪操作 来自定义一个段,格式如下:
.section section_name [, "flags"[, %type[,flag_specific_arguments]]]
.section 标记一个段的开始
section_name 段名
flags 段的属性标志
type 段的类型
flag_specific_arguments 指定参数内容
每一个段以段名为开始, 以下一个段名或者文件结尾为结束。
section_name 段名
汇编系统预定义的段名如下:
段名 | 含义 |
---|---|
.text | @代码段 |
.data | @初始化数据段.data Read-write initialized long data. |
.bss | @未初始化数据段 |
.sdata | @ .sdata Read-write initialized short data. |
.sbss | @ |
注意:源程序中.bss段应该在.text段之前。
flags 段的属性标志
这些段都有缺省的标志(flags),连接器可以识别这些标志。(与arm asm中的AREA相同)。
下面是ELF格式允许的段标志flags:
<标志> | 含义 |
---|---|
a | 允许段 |
w | 可写段 |
x | 执行段 |
M | 可合并 |
S | 包含零个终止的字符串 |
G | 段组成员 |
T | 用于线程本地存储 |
type 段的类型
<标志> | 含义 |
---|---|
%progbits | 段内包含数据 |
%nobits | 段中不包含数据(即该段只占用空间) |
%note | 段内包含程序以外使用的数据 |
%init_array | 段包含一个指向init函数的指针数组。(初始化) |
%fini_array | 段包含一个指向finish函数的指针数组。(完成) |
%preinit_array | 段包含一个指向pre-init函数的指针数组。(与初始化) |
举例:
例:定义一个“段”
.section .softoolcn @自定义数据段,段名为 “.softoolcn”
.align 2
strtemp:
@对这一句的理解,我觉得应该是:将"Temp string \n\0"这个字符串存储在以标号strtemp: 为起始地址的一段内存空间里
.ascii "Temp string \n\0"