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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
51e2482da2c941122b02b2f7cbf4b86c192ec9fb03a864b2921d4fa239063624
|
|
| MD5 |
7799c7ce5a902d0fc4eb0d7daf9ae65a
|
|
| BLAKE2b-256 |
d1db3213727715b5bce670a2ba1c344f6a6b4234af9ea34270a4d22a2575e9f5
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebec4a4fe3013643ad336dec0a2e06ddef391120ba9f4d4423c15cc2101a6f91
|
|
| MD5 |
77a19a52db7f17c0618e07418c9c9d27
|
|
| BLAKE2b-256 |
162dc807fc0593e74a6ce856d7297a4cd74d9be677cdc9d0dbfc792a7d6cce96
|