# poke-elf

> module for editing ELF object files, executables, shared libraries and core dumps

**Wikidata**: [Q125226200](https://www.wikidata.org/wiki/Q125226200)  
**Source**: https://4ort.xyz/entity/poke-elf

## Summary
poke-elf is a free software module designed for editing ELF (Executable and Linkable Format) object files, executables, shared libraries, and core dumps. It was developed by Spanish programmer Jose E. Marchesi as part of the GNU poke project. The tool enables low-level binary inspection and modification with a focus on precision and extensibility.

## Key Facts
- Creator: Jose E. Marchesi, born August 13, 1980
- License: GPL-3.0-or-later (Wikidata ID: Q27016754)
- First stable version released: 1.0 on March 30, 2024
- Part of: GNU poke suite
- Written in: C
- Operating system support: Linux (Q3251801)
- Maintained by: Jose E. Marchesi since 2024
- Source repository: https://git.savannah.gnu.org/cgit/poke/poke-elf.git
- Issue tracker: https://sourceware.org/bugzilla/describecomponents.cgi?product=poke
- Manual URL: https://jemarch.net/poke-elf-1.0-manual/

## FAQs
### Q: What is poke-elf used for?
A: poke-elf is used to inspect and edit ELF binaries such as object files, executables, shared libraries, and core dumps. It allows developers to perform precise modifications at the binary level using a high-level syntax.

### Q: Who created poke-elf?
A: poke-elf was created by Jose E. Marchesi, a Spanish computer scientist and programmer known for his work on the GNU project and other free software tools.

### Q: Is poke-elf open source?
A: Yes, poke-elf is free software licensed under the GNU General Public License version 3 or later. Its source code is publicly available via the GNU Savannah platform.

## Why It Matters
poke-elf plays a critical role in systems programming and reverse engineering by providing fine-grained control over ELF-formatted binaries. As part of the broader GNU poke initiative, it fills a niche for interactive binary manipulation that combines scripting capabilities with structured data access. This makes it especially valuable for debugging, patching, and analyzing compiled programs without requiring recompilation. By enabling direct interaction with internal structures like sections, segments, and headers, poke-elf empowers developers working in constrained environments or those needing surgical changes to existing binaries. Its integration into the GNU ecosystem also ensures long-term maintenance and community-driven development.

## Notable For
- Being the first dedicated ELF manipulation module within the GNU poke framework
- Offering both programmatic and interactive interfaces for binary editing
- Supporting full read/write operations across all major ELF components including notes, dynamic tags, relocations, and debug info
- Integrating seamlessly with poke's extensible type system and macro facilities
- Receiving official release status as version 1.0 in March 2024 after years of incubation

## Body
### Overview and Purpose
poke-elf is a specialized component of the GNU poke utility tailored specifically for handling Executable and Linkable Format (ELF) files. These include relocatable object files (.o), executable binaries, shared libraries (.so), and core dump files produced during crashes. Unlike general-purpose hex editors, poke-elf provides semantic understanding of ELF structures, allowing users to modify fields programmatically rather than manually calculating offsets.

The tool supports introspection and mutation of complex constructs such as section headers, program headers, symbol tables, relocation entries, dynamic linking metadata, and DWARF debugging information. Users can define custom transformations through embedded scripts written in Poke’s domain-specific language, which blends imperative constructs with strong typing and bitfield awareness.

### Development History
Development began under the stewardship of Jose E. Marchesi, who has been active in the GNU project and various free software initiatives. The initial public announcement came alongside the broader poke project, though poke-elf evolved as a distinct submodule hosted under the GNU Savannah infrastructure.

On March 30, 2024, version 1.0 was officially tagged and released, marking its transition from experimental to production-ready status. That same day, the tarball became accessible from official GNU mirrors, accompanied by detailed documentation and an online manual.

### Technical Features
#### Supported File Types
- Relocatable object files (.o)
- Executable binaries
- Shared objects (.so)
- Core dumps

#### Structural Support Includes:
- ELF header parsing/modification
- Section header table management
- Program header interpretation
- Symbol table navigation
- Dynamic segment decoding
- Note sections (including build IDs and auxiliary vectors)
- Relocation processing
- Debugging data (DWARF) traversal

#### Integration Points
As part of GNU poke, poke-elf inherits features like:
- Interactive REPL environment
- Scripting interface for batch tasks
- Extensible type definitions
- Macro expansion mechanisms
- Cross-platform abstraction layers (currently targeting Linux only)

### Licensing and Distribution
poke-elf is distributed under the terms of the GNU General Public License, version 3 or any later version (GPLv3+). All copyright is held by Jose E. Marchesi. Official releases are mirrored through the standard GNU FTP network and archived mailing list discussions occur on the poke-devel list hosted by gnu.org.

### Community and Maintenance
Active development takes place primarily through the poke-devel mailing list and bug reports submitted via Sourceware Bugzilla. Real-time collaboration happens in the #poke IRC channel on Libera.Chat. Since 2024, ongoing maintenance continues under the personal oversight of its original author, ensuring alignment with upstream GNU standards and practices.

## References

1. [Source](https://git.savannah.gnu.org/cgit/poke/poke-elf.git/tree/AUTHORS)
2. [poke-elf 1.0 released. 2024](https://lists.gnu.org/archive/html/info-gnu/2024-03/msg00009.html)
3. [Source](https://git.savannah.gnu.org/cgit/poke/poke-elf.git/tree/elf.pk)
4. [Source](https://lists.gnu.org/archive/html/poke-devel/)