logohsb.horse
← ブログ一覧に戻る

ブログ

ビルド成果物に含まれる依存関係を調べる

Goでビルドされたバイナリには、使用された依存関係やビルド設定の情報が埋め込まれている。

公開日:更新日:

Goでビルドされたバイナリには、使用された依存関係やビルド設定の情報が埋め込まれている。go version -m コマンドを使うと、ソースコードがなくてもバイナリからこれらの情報を抽出できる。

用途

  • 本番環境で動いているバイナリの依存関係を確認
  • 脆弱性のあるライブラリが含まれていないかチェック
  • ビルド時の設定(GOOS, GOARCHなど)の確認
  • バイナリがどのコミットからビルドされたか特定

使い方

Terminal window
go version -m <バイナリパス>

出力の見方

出力は複数のセクションに分かれている。

プレフィックス 意味
path モジュールのインポートパス
mod メインモジュール。(devel) はローカルビルドを示す
dep 依存モジュール。バージョンとチェックサムが含まれる
build ビルド時の設定やVCS情報

build セクションの主要な項目:

キー 説明
-compiler 使用したコンパイラ(通常 gc
CGO_ENABLED CGOの有効/無効
GOOS / GOARCH ターゲットOS/アーキテクチャ
vcs.revision ビルド元のコミットハッシュ
vcs.time コミットのタイムスタンプ
vcs.modified 未コミットの変更があったか

実行例

Terminal window
go version -m ./output
./output: go1.19
path github.com/mktbsh/output
mod github.com/mktbsh/output (devel)
dep github.com/aws/aws-lambda-go v1.34.1 h1:M3a/uFYBjii+...
dep github.com/labstack/echo/v4 v4.7.2 h1:Kv2/p8OaQ+M6...
...
build -compiler=gc
build CGO_ENABLED=0
build GOARCH=amd64
build GOOS=linux
build vcs.revision=39792fdacec6dc82b3f6335cb6b921c138f37625
build vcs.time=2022-08-18T08:50:08Z
build vcs.modified=true

この例では、Linux/amd64向けにビルドされ、CGOは無効、コミット 39792fd... からビルドされたが未コミットの変更があった(vcs.modified=true)ことがわかる。

関連

  • go version - Goのバージョン確認
  • go list -m all - ソースコードから依存関係を一覧表示

関連記事