Binutils

mohitmishra786/low-level-dev-skills/skills/binaries/binutils

by mohitmishra786bdc58472fa9fNo license253 starsListed Oct 9, 2026Updated Oct 9, 2026Repository updated 3 months ago

GNU binutils skill for binary manipulation and analysis. Use when using ar for static libraries, strip or objcopy for binary processing, addr2line for converting addresses to source locations, strings for text extraction, or c++filt for C++ name demangling. Activates on queries about ar, strip, objcopy, addr2line, strings, c++filt, ranlib, or binary post-processing tasks.

Instructions onlySoftware Development
AI-generated overview

Guides agents through GNU binutils tools for binary manipulation, static libraries, stripping, address mapping and demangling.

What it does
This skill provides command guidance for the GNU binutils toolset, covering ar for static library management, strip and objcopy for binary processing, addr2line for address-to-source mapping, c++filt for C++ symbol demangling, and strings for text extraction. It also includes quick references for readelf and objdump and notes on cross-binutils variants. It produces command examples and workflows rather than executable scripts.
When to use it
Use it when working with compiled binaries, such as creating or inspecting static libraries, stripping debug information, converting crash addresses to source lines, demangling C++ symbols, or extracting printable strings. It is also relevant for cross-compilation toolchains that use target-prefixed binutils.
Requirements
Requires the GNU binutils tools (ar, strip, objcopy, addr2line, c++filt, strings, ranlib) to be installed on the system. No scripts are shipped; the skill is instructions only, with an optional reference cheatsheet.

GNU Binutils

Purpose

Guide agents through the binutils toolset for binary manipulation: static libraries, stripping, address-to-source mapping, and symbol demangling.

Triggers

  • "How do I create a static library?"
  • "How do I strip a binary but keep a debug file?"
  • "I have an address from a crash — how do I find the source line?"
  • "How do I demangle a C++ symbol name?"
  • "How do I extract/replace sections in a binary?"

Workflow

1. ar — static library management

bash
# Create static libraryar rcs libfoo.a foo.o bar.o baz.o
# List contentsar t libfoo.a
# Extract an objectar x libfoo.a foo.o
# Add/replace an objectar r libfoo.a newbar.o
# Delete an objectar d libfoo.a oldbar.o
# Show symbol indexnm libfoo.a
# Rebuild symbol index (after modifying archive externally)ranlib libfoo.a

For LTO archives: use gcc-ar/gcc-ranlib or llvm-ar instead of plain ar.

2. strip — remove debug info

bash
# 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-placestrip prog
# To a new filestrip -o prog.stripped prog

3. objcopy — binary section manipulation

bash
# Separate debug info from binaryobjcopy --only-keep-debug prog prog.debugobjcopy --strip-debug prog
# Add debuglink (GDB finds prog.debug automatically)objcopy --add-gnu-debuglink=prog.debug prog
# Convert binary to another formatobjcopy -O binary prog prog.bin      # raw binary (embedded)objcopy -O srec prog prog.srec       # Motorola S-record
# Add a section from a fileobjcopy --add-section .resources=data.bin prog
# Remove a sectionobjcopy --remove-section .comment prog
# Change section flagsobjcopy --set-section-flags .data=alloc,contents,load,readonly prog
# Embed a binary file as a symbolobjcopy -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 — address to source

bash
# Convert a crash address to source:lineaddr2line -e prog -f 0x400a12# Output:# my_function# /home/user/src/main.c:42
# Multiple addressesaddr2line -e prog -f 0x400a12 0x400b34 0x400c56
# Inline frames (-i)addr2line -e prog -f -i 0x400a12
# Common use: pipe from backtrace outputcat crash.log | grep '0x[0-9a-f]' | grep -o '0x[0-9a-f]*' | \  addr2line -e prog -f -i

Requires the binary to have debug info (compiled with -g). For stripped binaries, use the unstripped version or a .debug file.

5. c++filt — demangle C++ symbols

bash
# Demangle a single symbolc++filt _ZN3foo3barEv# Output: foo::bar()
# Demangle from nm outputnm prog | c++filt
# Demangle from crash logcat crash.log | c++filt

Alternative: nm -C prog (demangle directly in nm).

6. strings — extract printable strings

bash
strings prog                    # all strings >= 4 charsstrings -n 8 prog               # minimum length 8strings -t x prog               # with offset (hex)strings -t d prog               # with offset (decimal)
# Search for specific stringsstrings prog | grep "version"strings prog | grep "Copyright"

7. readelf and objdump quick reference

(Full coverage in skills/binaries/elf-inspection)

bash
# Symbol lookup for crash address (alternative to addr2line)objdump -d -M intel prog | grep -A5 "400a12:"
# Find which object file defines a symbolobjdump -t prog | grep my_function

8. Cross-binutils

For cross-compilation, use the target-prefixed versions:

bash
aarch64-linux-gnu-strip progaarch64-linux-gnu-objcopy --only-keep-debug prog prog.debugaarch64-linux-gnu-addr2line -e prog 0x400a12arm-none-eabi-nm libfirmware.a

For a complete command cheatsheet covering all tools (ar, strip, objcopy, addr2line, strings, c++filt), see references/cheatsheet.md [blocked].

Related skills

  • Use skills/binaries/elf-inspection for readelf, nm, ldd, objdump inspection
  • Use skills/binaries/linkers-lto for linker flags and LTO
  • Use skills/debuggers/core-dumps for debug file management with objcopy --add-gnu-debuglink

Source and attribution

Source:mohitmishra786/low-level-dev-skillsinskills/binaries/binutilsat commitbdc5847

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal

Binutils · skills/binaries/binutils Agent Skill | SourceWeft