mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-22 15:48:09 -05:00
f26c30974a
* Add draft for Ghidra function import script * feature: Basic PDB analysis [skip ci] This is a draft with a lot of open questions left. Please do not merge * Refactor: Introduce submodules and reload remedy * refactor types and make them Python 3.9 compatible * run black * WIP: save progress * fix types and small type safety violations * fix another Python 3.9 syntax incompatibility * Implement struct imports [skip ci] - This code is still in dire need of refactoring and tests - There are only single-digit issues left, and 2600 functions can be imported - The biggest remaining error is mismatched stacks * Refactor, implement enums, fix lots of bugs * fix Python 3.9 issue * refactor: address review comments Not sure why VS Code suddenly decides to remove some empty spaces, but they don't make sense anyway * add unit tests for new type parsers, fix linter issue * refactor: db access from pdb_extraction.py * Fix stack layout offset error * fix: Undo incorrect reference change * Fix CI issue * Improve READMEs (fix typos, add information) --------- Co-authored-by: jonschz <jonschz@users.noreply.github.com> |
||
---|---|---|
.. | ||
lego_util | ||
import_functions_and_types_from_pdb.py | ||
README.md |
Ghidra Scripts
The scripts in this directory provide additional functionality in Ghidra, e.g. imports of symbols and types from the PDB debug symbol file.
Setup
Ghidrathon
Since these scripts and its dependencies are written in Python 3, Ghidrathon must be installed first. Follow the instructions and install a recent build (these scripts were tested with Python 3.12 and Ghidrathon v4.0.0).
Script Directory
- In Ghidra, Open Window -> Script Manager.
- Click the Manage Script Directories button on the top right.
- Click the Add (Plus icon) button and select this file's parent directory.
- Close the window and click the Refresh button.
- This script should now be available under the folder LEGO1.
Virtual environment
As of now, there must be a Python virtual environment set up under $REPOSITORY_ROOT/.venv
, and the dependencies of isledecomp
must be installed there, see here.
Development
- Type hints for Ghidra (optional): Download a recent release from https://github.com/VDOO-Connected-Trust/ghidra-pyi-generator,
unpack it somewhere, and
pip install
that directory in this virtual environment. This provides types and headers for Python. Be aware that some of these files contain errors - in particular,from typing import overload
seems to be missing everywhere, leading to spurious type errors. - Note that the imported modules persist across multiple runs of the script (see here).
If you indend to modify an imported library, you have to use
import importlib; importlib.reload(${library})
or restart Ghidra for your changes to have any effect. Unfortunately, even that is not perfectly reliable, so you may still have to restart Ghidra for some changes inisledecomp
to be applied.