之前写了一些 golang 的玩具,有的时候编译产物的体积比想象中更大,想确定是哪个依赖的原因也不太方便。琢磨了一下 elf 的格式,写了一个体积分析工具。顺便实现了类似 webpack bundle analyzer 那种的可视化界面,可以一层层查看不同 namespace 下的包,看起来直观一些。
项目地址: https://github.com/Zxilly/go-size-view
下载: https://github.com/Zxilly/go-size-view/releases/tag/0.1.0
因为依赖了一些 C++ 的东西,交叉编译不太方便,所以现在只编译了 linux 的。可以自己配依赖在其他平台上编译。
只能分析 elf64 格式的文件,PE 和 MachO 的支持要以后做了。
1
Nazz 2023-03-14 22:15:06 +08:00 via Android
看起来很不错
|
2
xujinkai 2023-03-14 22:32:18 +08:00 via Android
赞
|
3
FightPig 2023-03-15 00:39:10 +08:00
这个不错
|
4
ewBuyVmLZMZE 2023-03-15 01:59:36 +08:00
谢谢,这个很不错,我很好奇,后面会增加二进制压缩功能么?
|
5
wuzhewuyou 2023-03-15 06:53:34 +08:00 via Android
upx 压一下
|
6
mogging 2023-03-15 08:15:58 +08:00 via Android
很实用
|
7
learningman OP @syhily 不太可能,毕竟只是个检测工具。
|
8
proxytoworld 2023-03-15 10:39:47 +08:00
这检测原理是啥呢,看了一下源码没看懂
|
9
bv 2023-03-15 11:05:31 +08:00
有意思,问个题外问题:怎么没用 Go 实现
|
10
learningman OP @proxytoworld 分析符号表统计,然后常量靠反编译找相对地址
|
11
learningman OP @bv 没找到 go 好用的二进制分析库,翻了半天 delve 的代码感觉有点不太好搞
|
12
MyLeoWind 2023-03-15 11:45:43 +08:00 via Android
jondot/goweight 这个工具也可以
|
13
learningman OP @MyLeoWind 他这个实现比我的巧妙,感觉可以借过来优化一下
|
14
learningman OP @MyLeoWind 仔细看了一下不太行,他这个没法处理移除了 dead code 的情况,体现出来的体积不一定包括在最后的二进制文件里
|
15
proxytoworld 2023-03-15 16:16:27 +08:00
@learningman 也就是不能分析 release ? release 的应该移除了符号表把
|
16
learningman OP @proxytoworld 分析不了,必须要有符号表和调试信息
|