binutils的strip命令默认会剥离哪些内容?
strip无参数时的默认剥离规则及CPACK_STRIP_FILES对应行为
一、strip命令默认剥离的内容
直接运行strip(无任何选项)时,默认会移除以下非程序运行必需的内容:
- 完整符号表:包含全局、局部符号的
.symtab和.strtab段,这些仅用于调试和链接阶段 - 所有调试信息段:以
.debug_开头的各类段,比如.debug_line(行号映射)、.debug_info(调试元数据)等 - 注释段:
.comment段,通常记录编译器版本、编译时间等注释信息 - 行号信息段:
.line段,用于调试时关联代码行与机器指令
二、strip默认保留的核心内容
为保证程序正常运行,以下内容会被保留:
- 可执行代码段(
.text)、已初始化数据段(.data)、未初始化数据段(.bss) - 动态链接必需的符号信息:动态符号表(
.dynsym)、动态字符串表(.dynstr),确保程序能正确加载依赖的动态库 - 程序头表(Program Headers)和节头表(Section Headers)的必要部分,让操作系统可以正确识别和加载程序
三、CPACK_STRIP_FILES的实际行为
CPACK_STRIP_FILES会直接调用不带额外参数的strip命令,因此它的剥离/保留逻辑完全和上述strip默认规则一致——仅清理调试、符号类的冗余内容,不影响程序的正常运行和动态链接能力。
内容的提问来源于stack exchange,提问作者DBear
相关产品推荐
相关产品推荐

