Agent Skillsaresbit/MateBot › elf-patcher

elf-patcher

GitHub

通过C代码和链接器脚本修改ELF二进制文件,注入补丁到代码洞或指定地址,支持符号定义、段放置及交叉平台生成,适用于逆向工程和二进制插桩。

skills/elf-patcher/SKILL.md aresbit/MateBot

Trigger Scenarios

需要修改Linux ELF二进制文件 使用C代码替代汇编进行二进制修补 向二进制中注入编译后的C代码 执行二进制插桩任务

Install

npx skills add aresbit/MateBot --skill elf-patcher -g -y
More Options

Use without installing

npx skills use aresbit/MateBot@elf-patcher

指定 Agent (Claude Code)

npx skills add aresbit/MateBot --skill elf-patcher -a claude-code -g -y

安装 repo 全部 skill

npx skills add aresbit/MateBot --all -g -y

预览 repo 内 skill

npx skills add aresbit/MateBot --list

SKILL.md

Frontmatter
{
    "name": "elf-patcher",
    "description": "Patch ELF binaries using C code and linker script magic. Use when modifying Linux binaries by injecting compiled C code into code caves or specific addresses. Alternative to assembly patching for binary modification, reverse engineering payloads, or binary instrumentation tasks. Supports defining symbols at addresses, placing sections at offsets, and cross-platform patch generation."
}

ELF Patcher with C

Patch ELF binaries using C code and GNU linker features instead of raw assembly.

Quick Start

  1. Copy templates from assets/ directory
  2. Customize patch_at, patch_size, and external symbols in linkerscript
  3. Write patch logic in C using SECTION(".patch.code.*") attribute
  4. Compile: gcc -c binpatch.c -o binpatch.o -fno-pic -fno-pie -nostdlib
  5. Link: ld -T binpatch.ld binpatch.o -o patch.bin -nostdlib --oformat binary
  6. Apply: dd if=patch.bin of=target bs=1 seek=0xADDR conv=notrunc

Core Technique

This method leverages two GNU Linker features:

1. Symbol Definition

Define symbols at specific addresses in linkerscript:

my_puts = 0x42069;

Reference in C:

extern void (*my_puts)(char *);

2. Section Placement

Force sections to specific virtual addresses:

SECTIONS {
    . = 0xdeadbeefcafebabe;  /* Location counter */
    .patch ALIGN(1) : SUBALIGN(1) {  /* No alignment */
        KEEP(*(.patch))
    }
}

C Code Pattern

#define SECTION(x) __attribute__((section(x)))

SECTION(".patch.data.message")
const char msg[] = "Hello from patch!";

SECTION(".patch.code.entry")
void patch_entry() {
    puts(msg);  /* 'puts' defined in linkerscript */
}

Linker Script Pattern

patch_at = 0x01139;      /* Target address */
patch_size = 511;        /* Available bytes */
puts = 0x1030;           /* PLT entry */

SECTIONS {
    . = patch_at;
    .patch ALIGN(1) : SUBALIGN(1) {
        KEEP(*(.patch.code.*))
        KEEP(*(.patch.data.*))
    }
    ASSERT(SIZEOF(.patch) <= patch_size, "patch too big")
}

Resources

scripts/

  • apply_patch.py - Python script to apply binary patch to target file

references/

  • technique.md - Detailed technical documentation and considerations

assets/

  • binpatch.c - Template for patch C code
  • binpatch.ld - Template for linker script
  • Makefile - Build automation template

Important Considerations

  • PIE binaries: Use -fno-pic -fno-pie flags for non-PIE code
  • Size limits: ASSERT in linkerscript validates patch fits
  • ABI matching: May need assembly stubs for calling conventions
  • External symbols: Set to actual PLT/GOT addresses from target binary

Extensions

This technique enables:

  • Other languages (Rust, Zig, Nim) for patch generation
  • Cross-platform patches (platform-specific only in linker script)
  • PE/Mach-O compatibility
  • Embedded dynamic symbol resolvers

Read references/technique.md for full technical details.

Version History

  • 2328a17 Current 2026-08-20 10:31

Same Skill Collection

matecode/SKILL.md
skills/3d-cad-skill/SKILL.md
skills/agent-browser/SKILL.md
skills/arkts-agent-skill/SKILL.md
skills/autoresearch-skill/SKILL.md
skills/baoyu-post-to-wechat/SKILL.md
skills/blogwatcher/SKILL.md
skills/c-skill/SKILL.md
skills/chrome-cdp/SKILL.md
skills/claudeception/.claude/skills/continuous-learning/SKILL.md
skills/claudeception/examples/nextjs-server-side-error-debugging/SKILL.md
skills/claudeception/examples/prisma-connection-pool-exhaustion/SKILL.md
skills/claudeception/examples/typescript-circular-dependency/SKILL.md
skills/claudeception/SKILL.md
skills/clawdhub/SKILL.md
skills/coding-agent/SKILL.md
skills/docx/SKILL.md
skills/ebook/book-architect/SKILL.md
skills/ebook/book-idea-validator/SKILL.md
skills/ebook/book-ideation/SKILL.md
skills/ebook/book-market-research/SKILL.md
skills/ebook/chapter-architect/SKILL.md
skills/excalidraw-diagram-skill/SKILL.md
skills/frontend-slides/SKILL.md
skills/gemini/SKILL.md
skills/gifgrep/SKILL.md
skills/git-wt/SKILL.md
skills/github/SKILL.md
skills/harmonyos-code-review/SKILL.md
skills/harmonyos-linux-cli-dev/SKILL.md
skills/harmonyos-skills/skills/harmonyos-game-generator/SKILL.md
skills/harmonyos-skills/skills/harmonyos-test-cases/SKILL.md
skills/harmonyos-skills/skills/harmonyos-ui-automator/SKILL.md
skills/harmonyos-skills/skills/ohos-app-build-debug/SKILL.md
skills/hm-fetch-skill/SKILL.md
skills/hm-framework-skill/SKILL.md
skills/humanizer/SKILL.md
skills/ian-gemini-web/SKILL.md
skills/kernel-dev-skill/SKILL.md
skills/kimi/docx_SKILL.md
skills/kimi/pdf_SKILL.md
skills/kimi/SKILL.md
skills/kimi/webapp-building_SKILL.md
skills/lecture-skill/SKILL.md
skills/macos-menubar-tuist-app/SKILL.md
skills/macos2linuxapp/SKILL.md
skills/matecode/SKILL.md
skills/medialibrary-ut-generator/SKILL.md
skills/mermaid-validator/SKILL.md

Metadata

Files
0
Version
2328a17
Hash
c28b508d
Indexed
2026-08-20 10:31

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-25 17:44
浙ICP备14020137号-1 $방문자$