К основному содержанию
скилл CX Codex

elf-inspection — скилл для Claude Code: разбор ELF-бинарников

Ведёт агента по readelf, objdump, nm и ldd: зависимости, символы, секции, отладочная информация и ошибки линковки.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill elf-inspection -a claude-code
Открыть на GitHub

Что делает elf-inspection

Скилл описывает порядок работы с ELF-файлами на Linux. Агент начинает с file и size, чтобы понять тип, архитектуру и размеры секций, затем смотрит динамические зависимости через ldd, символы через nm, заголовки и секции через readelf, дизассемблирует через objdump. Для каждого шага в скилле есть готовые команды с нужными флагами.

Отдельные разделы посвящены диагностике. Если ldd показывает not found, скилл подсказывает проверить LD_LIBRARY_PATH и /etc/ld.so.conf, а потом выполнить ldconfig. При ошибке undefined reference или отсутствии символа в рантайме агент ищет, какая библиотека должна его экспортировать, и проверяет, попадает ли она в путь загрузки. Есть разбор раздутого бинарника: сортировка секций по размеру, поиск самых крупных функций, сравнение со stripped-версией.

Проверка защиты бинарника опирается на checksec, который ставится отдельно, либо на ручные команды readelf для PIE, RELRO, stack canary и NX. Анализ через bloaty тоже требует отдельной установки. Скилл ссылается на соседние материалы по линкерам, binutils и core-дампам.

Какие задачи решает

  • выяснить, от каких разделяемых библиотек зависит бинарник
  • найти, какая библиотека экспортирует нужный символ
  • разобраться с ошибкой undefined reference или отсутствием символа в рантайме
  • понять, почему бинарник распух, и найти крупнейшие функции
  • проверить PIE, RELRO, stack canary и NX у собранного файла

Примеры запросов агенту

  • посмотри через elf-inspection, какие библиотеки нужны этому бинарнику
  • почему мой бинарник такой большой? разбери секции и функции
  • у меня undefined reference на этапе линковки, помоги найти причину

Как установить elf-inspection

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill elf-inspection -a claude-code

2Вручную: положить файлы

~/.claude/skills/elf-inspection/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/elf-inspection/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора62

strace-ltrace Навык помогает ИИ находить причины некорректной работы Linux-программ без отладчика. Пригодится при поиске утерянных файлов конфигурации и отслеживании сетевых соединений. CX Codex +1 648установок make Скилл ведёт агента по идиоматичным Makefile: pattern-правила, автоотслеживание зависимостей, разбор ошибок make. CX Codex +1 649установок lldb Подсказывает команды LLDB для отладки C, C++, Swift и Objective-C. Пригодится при переходе с GDB или настройке отладки в macOS и VS Code. CX Codex +1 646установок simd-intrinsics Скилл ведёт агента через ручную векторизацию: чтение отчётов авто-векторизации, интринсики SSE2/AVX2/NEON и проверка флагов CPU в рантайме. CX Codex +1 645установок linux-kernel-modules Ведёт агента по написанию и отладке загружаемых модулей ядра Linux: Kbuild, параметры модуля, /proc, sysfs, символьные устройства, KGDB и ftrace. CX Codex +1 639установок memory-model Скилл для работы с моделью памяти C++ и Rust: подсказывает, какой memory order выбрать, и разбирает гонки данных в атомиках. CX Codex +1 634установок heaptrack Ведёт агента по heaptrack: запись трасс аллокаций, разбор через heaptrack_print, поиск утечек и сравнение запусков. CX Codex +1 623установок msvc-cl Подсказывает агенту, как компилировать C и C++ через MSVC cl.exe и clang-cl: флаги, рантайм, PDB, ошибки линковки. CX Codex +1 617установок

Похожие

analyzing-linux-elf-malware mahipal Скилл для разбора подозрительных Linux-бинарников: статика, трассировка, дизассемблирование. Пригодится при разборе взломанного сервера или контейнера. CX Codex +1 457установок codebase-inspection Hermes Agent Считает строки кода, файлы и языки в репозитории через pygount. Пригодится для оценки размера и состава проекта. CX Codex +1 420установок dwarf-expert trailofbits Разбирает отладочные секции DWARF в бинарниках, проверяет целостность деревьев DIE и помогает писать парсеры. Пригодится при анализе скомпилированного кода. CX Codex +1 5 200установок blender-motion-state-inspection affaan-m Помогает проверить персонажей и анимацию в Blender по реальным координатам костей, когда обычных скриншотов недостаточно. CX Codex +1 5 000установок binary-protection-bypass yaklang Скилл для разбора защит ELF-бинарников и подбора способов их обхода. Пригодится на CTF и при анализе эксплойтов. CX Codex +1 3 700установок debian-linux-triage официальный github Скилл помогает разбирать проблемы Debian Linux через apt, systemd и dpkg, учитывая AppArmor и firewall. Подойдёт для диагностики с пошаговой проверкой. 9 197установок

Вопросы о elf-inspection

Как установить elf-inspection в Claude?

Выполните npx skills add mohitmishra786/low-level-dev-skills --skill elf-inspection -a claude-code. Скилл окажется в ~/.claude/skills/elf-inspection/SKILL.md.

Что делает elf-inspection?

Задаёт агенту порядок разбора ELF-файлов: зависимости, таблица символов, секции, перемещения, отладочная информация, build ID. Плюс подсказывает, что делать при ошибках линковки и загрузки.

Нужны ли дополнительные инструменты?

Для проверки защиты бинарника скилл предлагает checksec, а для анализа размеров bloaty — оба ставятся отдельно. Остальные шаги идут на readelf, objdump, nm, ldd, file и size.

Исходный текст

SKILL.md · MIT
---
name: elf-inspection
description: ELF binary inspection skill for Linux. Use when examining ELF executables or shared libraries with readelf, objdump, nm, or ldd to understand symbol visibility, section layout, dynamic dependencies, build IDs, or relocation entries. Activates on queries about ELF format, shared library dependencies, symbol tables, section sizes, DWARF debug info in binaries, binary bloat analysis, or undefined symbol errors.
---

# ELF Inspection

## Purpose

Guide agents through inspecting Linux ELF binaries: symbol tables, section layout, dynamic linking, debug info, and diagnosing linker errors.

## Triggers

- "What libraries does this binary depend on?"
- "Why is this binary so large?"
- "I have an `undefined reference` or symbol not found at runtime"
- "How do I check if debug info is in this binary?"
- "How do I find what symbols a library exports?"
- "How do I check if a binary is PIE / has RELRO?"

## Workflow

### 1. Quick overview: `file` and `size`

```bash
file prog                    # type, arch, linkage, stripped or not
size prog                    # section sizes: text, data, bss
size --format=sysv prog      # detailed per-section breakdown
```

### 2. Dynamic dependencies: `ldd`

```bash
ldd ./prog                   # show all shared lib dependencies
ldd -v ./prog                # verbose: include symbol versions

# Check why a library is loaded
ldd ./prog | grep libssl

# For a library (not an executable)
ldd ./libfoo.so
```

If `ldd` shows `not found`, the shared library is missing from `LD_LIBRARY_PATH` or `/etc/ld.so.conf`.

Fix:

```bash
export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH
# Or install the library and run ldconfig
sudo ldconfig
```

### 3. Symbols: `nm`

```bash
nm prog                       # all symbols (T=text, D=data, U=undefined, etc.)
nm -D ./libfoo.so             # dynamic symbols only
nm -C prog                    # demangle C++ symbols
nm --defined-only prog        # only defined symbols
nm -u prog                    # only undefined (needed) symbols
nm -S prog                    # include symbol size

# Search for a symbol
nm -D /usr/lib/libssl.so | grep SSL_read
```

Symbol type codes:

- `T` / `t` — text (code): global / local
- `D` / `d` — data (initialised): global / local
- `B` / `b` — BSS (uninitialised): global / local
- `R` / `r` — read-only data: global / local
- `U` — undefined (needs to be provided at link time)
- `W` / `w` — weak symbol

### 4. Sections: `readelf`

```bash
readelf -h prog               # ELF header (arch, type, entry point)
readelf -S prog               # all sections
readelf -l prog               # program headers (segments)
readelf -d prog               # dynamic section (like ldd but raw)
readelf -s prog               # symbol table
readelf -r prog               # relocations
readelf -n prog               # notes (build ID, ABI tag)
readelf --debug-dump=info prog | head -100  # DWARF info
readelf -a prog               # all of the above
```

### 5. Disassembly and source: `objdump`

```bash
# Disassemble all code sections
objdump -d prog
objdump -d -M intel prog      # Intel syntax

# Disassemble + intermix source (needs -g at compile time)
objdump -d -S prog

# Disassemble specific symbol
objdump -d prog | awk '/^[0-9a-f]+ <main>:/,/^$/'

# All sections (including data)
objdump -D prog

# Header info
objdump -f prog
objdump -p prog               # private headers (including needed libs)
```

### 6. Binary hardening check

```bash
# Check for PIE, RELRO, stack canary, NX
# Use checksec (install separately)
checksec --file=prog

# Manual checks:
readelf -h prog | grep Type           # ET_DYN = PIE, ET_EXEC = non-PIE
readelf -d prog | grep GNU_RELRO      # RELRO present
readelf -d prog | grep BIND_NOW       # full RELRO
readelf -s prog | grep __stack_chk    # stack protector
readelf -l prog | grep GNU_STACK      # NX bit (RW = no exec, RWE = exec stack)
```

### 7. Section size analysis (binary bloat)

```bash
# Detailed section sizes
size --format=sysv prog | sort -k2 -nr | head -20

# Per-object contribution (with -Wl,--print-map or bloaty)
# Bloaty (install separately): https://github.com/google/bloaty
bloaty prog

# Check stripped vs not
file prog
strip --strip-all -o prog.stripped prog
ls -lh prog prog.stripped
```

### 8. Build ID

Build IDs uniquely identify a binary/library build, enabling `debuginfod` lookups.

```bash
readelf -n prog | grep 'Build ID'
# or
file prog | grep BuildID
```

### 9. Common diagnosis flows

**"undefined symbol at runtime"**

```bash
# Which library was expected to provide it?
nm -D libfoo.so | grep mysymbol
# Is the library in the runtime path?
ldd ./prog | grep libfoo
# Check LD_PRELOAD / LD_LIBRARY_PATH
```

**"binary is too large"**

```bash
size --format=sysv prog | sort -k2 -nr | head
nm -S --defined-only prog | sort -k2 -nr | head -20
objdump -d prog | awk '/^[0-9a-f]+ </{fn=$2} /^[0-9a-f]/{count[fn]++} END{for(f in count) print count[f], f}' | sort -nr | head -20
```

For a quick reference, see [references/cheatsheet.md](references/cheatsheet.md).

## Related skills

- Use `skills/binaries/linkers-lto` for linker flags and LTO
- Use `skills/binaries/binutils` for `ar`, `strip`, `objcopy`, `addr2line`
- Use `skills/debuggers/core-dumps` for build ID and debuginfod usage

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой