编译链接实战(30)strip移除了哪些内容
文章目录
- **1. 符号表(Symbol Table)**
- **例外保留的符号**
- **2. 调试信息(Debug Info)**
- **3. 其他可能移除的内容**
- **4. 不同 `strip` 模式的区别**
- **5. 如何验证 `strip` 的效果?**
- **(1) 检查符号表**
- **(2) 检查调试信息**
- **(3) 动态库的特殊检查**
- **6. 注意事项**
- **总结**
strip
命令主要用于移除二进制文件(如可执行文件、动态库
.so
、静态库
.a
)中的调试信息和符号表,以减少文件体积并提高安全性。以下是它移除的具体内容:
1. 符号表(Symbol Table)
strip
默认会移除以下符号表段:
.symtab
存储函数名、全局变量名等静态符号信息,供调试和静态分析使用(如nm
命令读取的内容)。- 影响:移除后无法通过
nm
查看函数名,但程序仍可运行。
- 影响:移除后无法通过
.strtab
存储符号名称的字符串表(.symtab
的辅助段)。- 局部符号(非外部可见符号)
如编译时生成的临时变量名。
关于什么是段可以参看前面elf介绍的文章。