ARM GNU 汇编中 .section 的起始终止
一 规则概览
-
每个 .section 指令开启一个新段,段的“起点”就是该指令出现的位置。
-
段的“终点”是下一个 .section 指令或源文件末尾;不需要、也没有单独的“结束伪指令”来关闭当前段。
-
这与 ARMASM 的 AREA 风格不同(AREA 需要成对的 END),GNU as 使用“下一个段或 EOF”来界定段边界
二 默认段与常用段
-
常用预定义段名:.text(代码,通常只读可执行)、.data(已初始化数据,可读写)、.bss(未初始化数据,可读写,加载时清零)。
-
典型布局示例:
复制.section .data msg: .ascii "Hello\n" @ .data 段内容.section .bss buf: .space 1024 @ .bss 段内容.section .text .globl _start _start:mov r0, #1mov r1, #2bx lr @ .text 段内容上述示例中,每个段的“起点”是各自的 .section 行,“终点”是后续的 .section 或文件结束
。
三 自定义段与段标志
-
自定义段语法(ELF):
.section <name> [,"flags"[,%type[,flag_specific_arguments]]]常见标志:a(可分配)、w(可写)、x(可执行)。
-
示例:创建一个可写、未执行的自定义段
复制.section .mysec,"aw" @ 起点:自定义段开始 myvar: .word 0x12345678 @ 属于 .mysec 的数据@ 终点:遇到下一个 .section 或 EOF .section .text _start:ldr r0, =myvarbx lr该自定义段从
。.section .mysec,"aw"开始,到下一个.section或文件末尾结束
四 常见误区与建议
-
GNU as 没有“section end”指令;不要写成类似
sectionend的形式。 -
若希望显式标注“此处不再属于本段”,只需在需要的位置写一个新的 .section 即可,汇编器会把前一段在此处结束。
-
为满足访问对齐或硬件约束,常在段内配合使用 .align(对齐)与 .balign(按字节对齐)等伪操作,它们只影响布局,不代表段的起止。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945440.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!