Skip to main content

Parser for ELF files written in python

Project description

pelfy

Description

Pelfy (Python Executable and Linkable Format analyzer) is an ELF parser written in python. It shows header fields, sections, symbols and relocation and gives access to all raw data as well as human readable representations.

Key Features

  • Provide names for fields and values as well as descriptions
  • Relocation types for x86, MIPS, ARM and RISC-V all in 32 and 64 bit
  • Outputs tables in nicely formatted HTML, markdown or text
  • Uses HTML outputs for Jupyter Notebook integration
  • Compact code base
  • Pure fully static typed python and no other dependencies

Usage Scenarios

  • Reverse engineering tools
  • Testing
  • Documentation

Installation

The package has no additional decencies. It can be installed with pip:

pip install pelfy

Usage

Example code and its outputs:

import pelfy

elf = pelfy.open_elf_file('obj/test-c-riscv64-linux-gnu-gcc-12-O3.o')
elf.sections
index name type description
0 SHT_NULL Section header table entry unused
1 .text SHT_PROGBITS Program data
2 .rela.text SHT_RELA Relocation entries with addends
3 .data SHT_PROGBITS Program data
4 .bss SHT_NOBITS Program space with no data (bss)
5 .comment SHT_PROGBITS Program data
6 .note.GNU-stack SHT_PROGBITS Program data
7 .riscv.attributes 0x70000003 Application-specific
8 .symtab SHT_SYMTAB Symbol table
9 .strtab SHT_STRTAB String table
10 .shstrtab SHT_STRTAB String table
elf.functions
index name info size stb description
11 result_float STT_FUNC 8 STB_GLOBAL Symbol is a code object
12 result_float_float STT_FUNC 12 STB_GLOBAL Symbol is a code object
13 add_float_float STT_FUNC 12 STB_GLOBAL Symbol is a code object
14 mul_float_float STT_FUNC 12 STB_GLOBAL Symbol is a code object
15 read_float STT_FUNC 16 STB_GLOBAL Symbol is a code object
elf.symbols['read_float'].get_relocations()
index symbol name type calculation
4 .LANCHOR0 R_RISCV_PCREL_HI20 S + A - P
5 R_RISCV_RELAX
6 .L0 R_RISCV_PCREL_LO12_I S - P
7 R_RISCV_RELAX
8 result_float_float R_RISCV_CALL_PLT S + A - P
9 R_RISCV_RELAX

Contributing

Contributions are welcome! Please open an issue or submit a pull request on GitHub.

Developer Guide

To get started with developing the pelfy package, follow these steps:

First, clone the repository to your local machine using Git:

git clone https://github.com/Nonannet/pelfy.git
cd pelfy

Install the package while keeping files in the current dev directory:

pip install -e .

Install pytest (unit testing), mypy (type checking) and flake8 (style guide checking):

pip install pytest mypy flake8

Ensure that everything is set up correctly by running the tests:

pytest

For creating additional test object files place the source c-files in the tests/src/ directory, change the current directory to tests/src/ and run bash run_cross_compilation.sh. This script uses a docker container to cross compile all c-files to object files and outputs them in the tests/obj directory.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pelfy-1.0.0.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pelfy-1.0.0-py3-none-any.whl (16.7 kB view details)

Uploaded Python 3

File details

Details for the file pelfy-1.0.0.tar.gz.

File metadata

  • Download URL: pelfy-1.0.0.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.4

File hashes

Hashes for pelfy-1.0.0.tar.gz
Algorithm Hash digest
SHA256 4460b7265b9a617b2d7b659888b27e7ff4e90f2a60b5a89661d1bd061632d1e5
MD5 1bdb35ca678040a32d01cccf876146f5
BLAKE2b-256 f4e65ec95166128ee3f7b75c7bdbe1be6f122f525c54e60cbf8c9a23cae7da40

See more details on using hashes here.

File details

Details for the file pelfy-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: pelfy-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 16.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.4

File hashes

Hashes for pelfy-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 76f0c3c4f11869329a3d28ba30ba216b7149c21ead4a4e183f5d19d8c7618a13
MD5 0de60e5a2f8a0acf50cde6df800a695a
BLAKE2b-256 e3fbe9fcce0c943e402cd28a5dd2e2aaf22627917525608c45599f784752f22c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page