V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
learningman
V2EX  ›  Go 编程语言

写了一个分析 Golang 二进制依赖体积的工具

  •  
  •   learningman ·
    Zxilly · 2023-03-14 22:07:54 +08:00 · 2674 次点击
    这是一个创建于 654 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前写了一些 golang 的玩具,有的时候编译产物的体积比想象中更大,想确定是哪个依赖的原因也不太方便。琢磨了一下 elf 的格式,写了一个体积分析工具。顺便实现了类似 webpack bundle analyzer 那种的可视化界面,可以一层层查看不同 namespace 下的包,看起来直观一些。

    preview

    项目地址: https://github.com/Zxilly/go-size-view

    下载: https://github.com/Zxilly/go-size-view/releases/tag/0.1.0

    因为依赖了一些 C++ 的东西,交叉编译不太方便,所以现在只编译了 linux 的。可以自己配依赖在其他平台上编译。

    只能分析 elf64 格式的文件,PE 和 MachO 的支持要以后做了。

    16 条回复    2023-03-15 16:46:31 +08:00
    Nazz
        1
    Nazz  
       2023-03-14 22:15:06 +08:00 via Android
    看起来很不错
    xujinkai
        2
    xujinkai  
       2023-03-14 22:32:18 +08:00 via Android
    FightPig
        3
    FightPig  
       2023-03-15 00:39:10 +08:00
    这个不错
    ewBuyVmLZMZE
        4
    ewBuyVmLZMZE  
       2023-03-15 01:59:36 +08:00
    谢谢,这个很不错,我很好奇,后面会增加二进制压缩功能么?
    wuzhewuyou
        5
    wuzhewuyou  
       2023-03-15 06:53:34 +08:00 via Android
    upx 压一下
    mogging
        6
    mogging  
       2023-03-15 08:15:58 +08:00 via Android
    很实用
    learningman
        7
    learningman  
    OP
       2023-03-15 08:27:22 +08:00 via Android
    @syhily 不太可能,毕竟只是个检测工具。
    proxytoworld
        8
    proxytoworld  
       2023-03-15 10:39:47 +08:00
    这检测原理是啥呢,看了一下源码没看懂
    bv
        9
    bv  
       2023-03-15 11:05:31 +08:00
    有意思,问个题外问题:怎么没用 Go 实现
    learningman
        10
    learningman  
    OP
       2023-03-15 11:24:10 +08:00
    @proxytoworld 分析符号表统计,然后常量靠反编译找相对地址
    learningman
        11
    learningman  
    OP
       2023-03-15 11:25:19 +08:00
    @bv 没找到 go 好用的二进制分析库,翻了半天 delve 的代码感觉有点不太好搞
    MyLeoWind
        12
    MyLeoWind  
       2023-03-15 11:45:43 +08:00 via Android
    jondot/goweight 这个工具也可以
    learningman
        13
    learningman  
    OP
       2023-03-15 12:11:13 +08:00
    @MyLeoWind 他这个实现比我的巧妙,感觉可以借过来优化一下
    learningman
        14
    learningman  
    OP
       2023-03-15 12:19:16 +08:00
    @MyLeoWind 仔细看了一下不太行,他这个没法处理移除了 dead code 的情况,体现出来的体积不一定包括在最后的二进制文件里
    proxytoworld
        15
    proxytoworld  
       2023-03-15 16:16:27 +08:00
    @learningman 也就是不能分析 release ? release 的应该移除了符号表把
    learningman
        16
    learningman  
    OP
       2023-03-15 16:46:31 +08:00
    @proxytoworld 分析不了,必须要有符号表和调试信息
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   968 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:28 · PVG 06:28 · LAX 14:28 · JFK 17:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.