https://github.com/v3l0c1r4pt0r/makeelf
ELF reader-writer library for Python3
https://github.com/v3l0c1r4pt0r/makeelf
elf generator library parser python python3
Last synced: 5 months ago
JSON representation
ELF reader-writer library for Python3
- Host: GitHub
- URL: https://github.com/v3l0c1r4pt0r/makeelf
- Owner: v3l0c1r4pt0r
- License: gpl-3.0
- Created: 2017-10-08T12:50:06.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-01-25T18:33:27.000Z (over 3 years ago)
- Last Synced: 2025-09-30T02:57:12.130Z (9 months ago)
- Topics: elf, generator, library, parser, python, python3
- Language: Python
- Homepage: https://static.re-ws.pl/makeelf/master/
- Size: 153 KB
- Stars: 67
- Watchers: 6
- Forks: 29
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# MakeELF
ELF reader-writer library for Python3
## Overview
MakeELF is a Python library to parse, modify and create ELF binaries. It
provides following features:
* easy to use, standard Python interface
* reading existing ELF files to Python representation
* modification of every aspect of ELF format structures
* ability to skip any validation to test other parsers for potential errors
* creating new valid ELF files with just one step
* easy serialization of every structure present in ELF file
## Installation
MakeELF could be installed either using PyPI and pip3 tool or manually with help
of setup.py script.
### Install from PyPI
It is as simple as typing:
```shell
pip3 install makeelf
```
### Manual installation
Clone the Github repository and in root of the project execute:
```shell
python3 setup.py install
```
## API
### Creating new object
```Python
from makeelf.elf import *
elf = ELF(e_machine=EM.EM_LKV373A)
print(elf)
```
### Parsing ELF file
Either using helper function:
```Python
elf = ELF.from_file('some.elf')
print(elf)
```
Then if you'd like to have full control on headers, low-level object can be
extracted:
```Python
elf = elf.Elf
```
Or create low-level object manually:
```Python
fd = os.open('some.elf', os.O_RDONLY)
b = os.read(fd, 0xffff)
os.close(fd)
elf, b = Elf32.from_bytes(b)
print(elf)
```
### Saving ELF to file
```Python
fd = os.open('other.elf', os.O_WRONLY | os.O_CREAT | os.O_TRUNC)
os.write(fd, bytes(elf))
os.close(fd)
```
### Adding a section
```Python
data_id = elf.append_section('.data', b'\0\0\0\0', 0xfadd)
```
### Adding a symbol
```Python
elf.append_symbol('NULL', data_id, 0, 4)
```
### Modifying attributes
```Python
elf.Elf.Shdr_table[data_id].sh_flags = int(SHF.SHF_ALLOC)
```
## License
All the software here is licensed under GNU General Public License 3.0,
available in LICENSE file.