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"
