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.1.tar.gz (19.0 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.1-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pelfy-1.0.1.tar.gz
  • Upload date:
  • Size: 19.0 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.1.tar.gz
Algorithm Hash digest
SHA256 566c064f5ef3c27b53e74503c1f44b589b9c851cf6ebc29ab30e4da1dccdb4bc
MD5 c8bdcb65e26716be4205e2d39497e4a3
BLAKE2b-256 5f9c5065192b0d2181baaeb7aa903eba88ab286c00e98d5fda47e7dd84c2a774

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pelfy-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 17.2 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d9f7bcbc5880c713be92d1e1204be7950c943983f100a391f46f0800a8cbfa86
MD5 5d71706273807500e2da79279f6676f7
BLAKE2b-256 bdf1563fd79fd462bb8a9bc0f97207c1367c35a0c91685cf7fe896f8e68e3ff3

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