7.65 .scl class 设置一个符号的存储类型值(storage-class value)。本命令只能在.def/.endef之间使用。符号的存储类型可以表明符号是static类型或是external类型,或者进一步记录符号的调试信息。 ‘.scl’命令主要与在COFF输出有关,当生成b.out输出格式时,as接受本命令,但忽略本命令。
7.66 .section name (COFF 版本) 使用.section命令将后续的代码汇编进一个定名为name的段。 本命令只能在目标格式真正支持任意命名段时使用;例如,汇编一个a.out目标格式时,即使name是一个标准的a.out段名,本命令也不被接受。 当目标格式为COFF时,.section命令的使用为下面某一种格式: .section name[, "flags"] .section name[, subsegment] 如可选参数使用了引号,它将被视为该段的标志(flags)。每个标记是单个的字符。下列是认可的标志。 b bss 段 (未初始化的数据) n 未装入内存的段 w 可写的段 d 数据段 r 只读段 x 代码段 (executable section) s 共享段 (目标为PE格式有意义) 如果本命令没有指定标志,则依靠段名来确定标志缺省值。如果该段名没有使用标准段名,则默认该段已装入内存并且可写。注意在使用n和w标志组合时,不是增加这组属性,而是删除该段的属性。所以如果只存在这两个标志,就代表该段没有指定任何标志。 如果本命令的可选参数没有使用引号,参数将被视为子段的编号。(参见 4.4 [Sub-Sections], 25页)。
7.67 .section name (ELF 版本) 本命令是ELF的段堆栈操作命令之一,其他的段堆栈命令为.subsection (见 Section 7.79 [SubSection], page 56), .pushsection (见Section 7.61 [PushSection], page 50), .popsection (见 Section 7.56 [PopSection], page 50), and .previous (见 Section 7.55 [Previous], page 49). 当目标格式为ELF时,.section命令应如下使用: .section name [, "flags"[, @type]] 可选参数flags是被引号包围的字符串,可以由下列字符的任意组合: a 可分配的段(allocatable) w 可写段 x 代码段 可选的参数type可以包含下列的任一常量: @progbits 包含数据的段 @nobits 不包含数据的段(只占用空间的段) 如果本命令没有指定标志,则依靠段名来确定标志缺省值。如果段名不是标准的段名,则默认的该段不包含上述标志:该段不可分配内存,不可写,不可执行。该段是包含数据的段。 当目标格式为ELF时,as还支持另一种形式的.section命令,以便兼容Solaris的汇编器: .section "name"[, flags...] 注意段名是使用引号包围的,可能存在一系列由逗号分隔分隔的标志: #alloc 可分配的段(section is allocatable) #write 可写的段 #execinstr 可执行的段 本命令将(用段名为name的段)替代当前段和子段。被替换的段将被推入段堆栈。参见gas的测试套件目录gas/testsuite/gas/elf,可以找到一些本命令和其他段堆栈操作命令的例子。
.stabd type , other , desc 生成符号的“名字”甚至不是空字符串,而是一个空指针(null),这样安排是出于对兼容性要求。早期的汇编器经常使用空指针,以避免空字符串在目标文件中浪费空间。 这个符号的值(值域)在重定位时设置为位置计数器的值。当程序连接之后,这个符号的值是.stabd命令汇编时位置计数器的地址。 .stabn type , other , desc , value 这个符号的名字被设置为空字符串“”。 .stabs string , type , other , desc , value 5个属性域全部指定好。