You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NASM编译ELF文件时段名大小写为何导致二进制大小差异

ELF可执行文件体积差异的原因

核心原因总结

问题本质是GNU链接器(ld)对ELF节名称大小写敏感,且仅对标准小写节名应用默认内存布局规则,具体细节如下:

  1. NASM的处理逻辑
    NASM对汇编伪指令(如.text、.data)确实大小写不敏感,但会原样保留你输入的节名称大小写到目标文件(hello.o)的节表中。

  2. ld的链接规则差异
    Debian默认使用的GNU ld对ELF节名称大小写敏感:

  • 当目标文件存在标准小写节名(.text、.data)时,ld会将它们归类到系统默认的代码段、数据段,严格遵循ELF可执行文件的内存页对齐要求(通常为4KB)。为满足对齐规则,ld会在节内容后添加大量填充字节,同时生成完整的标准段头信息,直接导致最终二进制文件体积较大(9048字节)。
  • 当节名是大写或混合大小写(.TEXT、.dAtA等)时,ld会将这些视为自定义节,不应用标准段的对齐规则,仅按照节的实际数据大小分配空间,也不会生成冗余的段头填充,因此最终二进制文件体积大幅缩小(4856字节)。

验证方法

可以通过readelf -S hello命令分别查看两种生成的可执行文件的节表信息,对比标准节与自定义节的Align(对齐值)和Size(占用空间)字段,就能直观看到对齐填充带来的体积差异。

内容的提问来源于stack exchange,提问作者Egor Belkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:39:17