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 dependencies. It can be installed with pip:

pip install pelfy

Usage

Example code and its outputs:

import pelfy

elf = pelfy.open_elf_file('tests/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'].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.2.tar.gz (19.3 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.2-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pelfy-1.0.2.tar.gz
Algorithm Hash digest
SHA256 51e2482da2c941122b02b2f7cbf4b86c192ec9fb03a864b2921d4fa239063624
MD5 7799c7ce5a902d0fc4eb0d7daf9ae65a
BLAKE2b-256 d1db3213727715b5bce670a2ba1c344f6a6b4234af9ea34270a4d22a2575e9f5

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pelfy-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ebec4a4fe3013643ad336dec0a2e06ddef391120ba9f4d4423c15cc2101a6f91
MD5 77a19a52db7f17c0618e07418c9c9d27
BLAKE2b-256 162dc807fc0593e74a6ce856d7297a4cd74d9be677cdc9d0dbfc792a7d6cce96

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