mcpField
B
binutils

binutils

github.com/mohitmishra786開発269619 回インストール18 週間前に更新
リポジトリ

binutils について

GNU Binutils によるバイナリ操作をエージェント向けに案内するスキルです。静的ライブラリ、デバッグ情報、アドレスからソースへの対応付け、C++ シンボルのデマングルを扱います。

主な機能

  1. 01ar による静的ライブラリの作成と確認
  2. 02strip によるデバッグ情報の削除
  3. 03objcopy によるデバッグ情報の分離とセクション操作
  4. 04addr2line によるアドレスとソースの対応付け
  5. 05c++filt による C++ シンボルのデマングル

活用シーン

  1. 01静的ライブラリの作成や内容確認
  2. 02バイナリからデバッグファイルを分離
  3. 03クラッシュアドレスをソース行まで追跡
  4. 04クラッシュログの C++ シンボルを解読

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill binutils

インストール後、Claude Code で/binutilsを入力して読み込まれたか確認します。

同梱ファイルreferences/cheatsheet.md

詳細

GNU Binutils

目的

静的ライブラリの作成、ストリップ、アドレスからソースへのマッピング、シンボルのデマングルなど、バイナリ操作に関する binutils ツールセットの使い方をエージェントに案内します。

トリガー

  • 「静的ライブラリを作成するにはどうすればよいですか?」
  • 「デバッグファイルを保持したまま、バイナリをストリップするにはどうすればよいですか?」
  • 「クラッシュ時のアドレスがあります。ソースの行を特定するにはどうすればよいですか?」
  • 「C++ のシンボル名をデマングルするにはどうすればよいですか?」
  • 「バイナリ内のセクションを抽出/置換するにはどうすればよいですか?」

ワークフロー

1. ar — 静的ライブラリの管理
# Create static library
ar rcs libfoo.a foo.o bar.o baz.o

# List contents
ar t libfoo.a

# Extract an object
ar x libfoo.a foo.o

# Add/replace an object
ar r libfoo.a newbar.o

# Delete an object
ar d libfoo.a oldbar.o

# Show symbol index
nm libfoo.a

# Rebuild symbol index (after modifying archive externally)
ranlib libfoo.a

LTO アーカイブには、通常の ar ではなく、gcc-ar/gcc-ranlib または llvm-ar を使用してください。

2. strip — デバッグ情報の削除
# Strip all debug info (reduce binary size)
strip --strip-all prog

# Strip only debug sections (keep symbol table)
strip --strip-debug prog

# Strip unneeded symbols (keep needed for linking)
strip --strip-unneeded prog

# In-place
strip prog

# To a new file
strip -o prog.stripped prog
3. objcopy — バイナリのセクション操作
# Separate debug info from binary
objcopy --only-keep-debug prog prog.debug
objcopy --strip-debug prog

# Add debuglink (GDB finds prog.debug automatically)
objcopy --add-gnu-debuglink=prog.debug prog

# Convert binary to another format
objcopy -O binary prog prog.bin      # raw binary (embedded)
objcopy -O srec prog prog.srec       # Motorola S-record

# Add a section from a file
objcopy --add-section .resources=data.bin prog

# Remove a section
objcopy --remove-section .comment prog

# Change section flags
objcopy --set-section-flags .data=alloc,contents,load,readonly prog

# Embed a binary file as a symbol
objcopy -I binary -O elf64-x86-64 \
    --rename-section .data=.rodata,alloc,load,readonly,data,contents \
    data.bin data.o
# Then link data.o; access via _binary_data_bin_start / _binary_data_bin_end
4. addr2line — アドレスからソースへの変換
# Convert a crash address to source:line
addr2line -e prog -f 0x400a12
# Output:
# my_function
# /home/user/src/main.c:42

# Multiple addresses
addr2line -e prog -f 0x400a12 0x400b34 0x400c56

# Inline frames (-i)
addr2line -e prog -f -i 0x400a12

# Common use: pipe from backtrace output
cat crash.log | grep '0x[0-9a-f]' | grep -o '0x[0-9a-f]*' | \
  addr2line -e prog -f -i

バイナリにデバッグ情報が含まれている必要があります(-g を指定してコンパイルしてください)。ストリップ済みのバイナリの場合は、ストリップ前のバイナリまたは .debug ファイルを使用してください。

5. c++filt — C++ シンボルのデマングル
# Demangle a single symbol
c++filt _ZN3foo3barEv
# Output: foo::bar()

# Demangle from nm output
nm prog | c++filt

# Demangle from crash log
cat crash.log | c++filt

代替方法:nm -C prog(nm で直接デマングルします)。

6. strings — 表示可能な文字列の抽出
strings prog                    # all strings >= 4 chars
strings -n 8 prog               # minimum length 8
strings -t x prog               # with offset (hex)
strings -t d prog               # with offset (decimal)

# Search for specific strings
strings prog | grep "version"
strings prog | grep "Copyright"
7. readelf と objdump のクイックリファレンス

(詳しくは skills/binaries/elf-inspection を参照してください)

# Symbol lookup for crash address (alternative to addr2line)
objdump -d -M intel prog | grep -A5 "400a12:"

# Find which object file defines a symbol
objdump -t prog | grep my_function
8. クロス binutils

クロスコンパイルでは、ターゲットのプレフィックスが付いたバージョンを使用してください。

aarch64-linux-gnu-strip prog
aarch64-linux-gnu-objcopy --only-keep-debug prog prog.debug
aarch64-linux-gnu-addr2line -e prog 0x400a12
arm-none-eabi-nm libfirmware.a

すべてのツール(ar、strip、objcopy、addr2line、strings、c++filt)を網羅したコマンドチートシートは、references/cheatsheet.md を参照してください。

関連スキル

  • readelf、nm、ldd、objdump による調査には、skills/binaries/elf-inspection を使用してください
  • リンカーフラグと LTO については、skills/binaries/linkers-lto を使用してください
  • objcopy --add-gnu-debuglink を使用したデバッグファイルの管理には、skills/debuggers/core-dumps を使用してください

コメント