【编译】strip去除符号表

1. 去除符号表

作用:去除符号表可以极大缩小发布的二进制大小(有时候可以缩小一半)
去除手段共两种:

  1. 直接使用strip命令
  2. 使用objcopy(更常用)
# 直接使用strip命令
strip xxx.so
# objcopy
# 生成dbg信息
objcopy --only-keep-debug xxx.so xxx.dbg
# 去除符号表
objcopy --strip-debug --strip-unneeded --add-gnu-debuglink=xxx.dbg  xxx.so

查看符号表:

# objdump
objdump -t xxx

# readelf 
readelf -s xxx

2. dbg信息的作用

gdb功能基本上都围绕这符号表展开的,dbg信息主要给gdb使用,缺失dbg信息,对于静态库和动态库的影响程度不一样。

2.1 静态编译

静态库因为在装载的过程中没有重定位符号表的需求。 strip过程中会直接将其所有的符号表
去掉,这个时候可以查看静态编译产生的二进制没有任何符号表。这个时候可以说gdb无法打断点,无法查看调用栈,可以说根本没办法使用。

2.2 动态库编译方式

动态库的重定位发生在加载过程中,这个时候虽然去掉了符号表里面的.debug这个节,但是符号表还在。只是想要使用gdb --tui这种和c语言可视化调试界面用不了而已,而且大型项目中我们一般也不会使用这种调试方式。所以动态库去掉debug信息,对于gdb大部分功能没有影响(打断点、查调用栈、call函数、查内存地址)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值