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

如何清除NASM与ld编译汇编程序生成的可执行文件中的无用字符串常量

清除无用信息的方法

以下方法按操作复杂度从低到高排列:

方法1:链接后直接剥离元数据

使用binutils自带的strip工具直接移除所有无关的符号、节名、源文件名信息,操作最简单:

strip --strip-all hello_world

执行后你提到的hello_world_32.s、.text、.rodata等字符串都会被完全清除,程序功能不受任何影响,体积可缩小一半以上。

方法2:链接阶段直接生成无冗余的可执行文件

在ld链接时添加参数,直接避免生成无用元数据,不需要后续处理:

ld --nmagic -m elf_i386 --strip-all --omit-section-headers -o hello_world hello_world.o

相关参数作用:

  • --strip-all:链接时直接不生成符号表、字符串表、调试信息等非运行必须的内容
  • --omit-section-headers:移除节头表,Linux运行ELF程序仅依赖程序头表,节头表完全是为了调试/逆向准备的,移除后可再减少几十字节体积

极致体积优化可选操作

如果目标是生成尽可能小的可执行文件,还可以修改汇编代码进一步压缩:

  • 取消.rodata段定义,将字符串常量直接写入.text段,减少段数量,避免段对齐带来的空间浪费
  • 优化指令长度,比如用mov bl, 1替代mov ebx, 1、用xor eax,eax后inc al替代mov eax,1这类短指令实现相同逻辑
  • 极致玩法可以手动构造ELF头和代码拼接,32位hello world最终可以做到不足100字节大小。

内容的提问来源于stack exchange,提问作者Kolay.Ne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:48:03