mirror of https://github.com/Nonannet/pelfy.git
Readme updated
This commit is contained in:
parent
467bb64d00
commit
6eda00cd94
109
README.md
109
README.md
|
@ -0,0 +1,109 @@
|
||||||
|
# pelfy
|
||||||
|
|
||||||
|
## Description
|
||||||
|
Pelfy is ELF (Executable and Linkable Format) parser written in python. It shows
|
||||||
|
header fields, sections, symbols and relocation and gives access to all raw data
|
||||||
|
as well as human readable names.
|
||||||
|
|
||||||
|
### 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
|
||||||
|
- Compact syntax
|
||||||
|
- Outputs tables in HTML, markdown or text
|
||||||
|
- Jupyter notebook support
|
||||||
|
- Pure python and no dependencies
|
||||||
|
|
||||||
|
### Usage Scenarios
|
||||||
|
- Reverse engineering tools
|
||||||
|
- Testing
|
||||||
|
- Documentation
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
The package has no additional decencies. It can be installed with pip:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install pelfy
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
Example code and its outputs:
|
||||||
|
|
||||||
|
```python
|
||||||
|
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 |
|
||||||
|
```python
|
||||||
|
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 |
|
||||||
|
```python
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/Nonannet/pelfy.git
|
||||||
|
cd pelfy
|
||||||
|
```
|
||||||
|
|
||||||
|
Install the package while keeping files in the current dev directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -e .
|
||||||
|
```
|
||||||
|
|
||||||
|
Install pytest (unit testing), mypy (type checking) and flake8 (style guide checking):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install pytest mypy flake8
|
||||||
|
```
|
||||||
|
|
||||||
|
Ensure that everything is set up correctly by running the tests:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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](LICENSE) file for details.
|
Loading…
Reference in New Issue