playdate-reverse-engineering icon indicating copy to clipboard operation
playdate-reverse-engineering copied to clipboard

Document `pdex.bin` file format and add improved conversion script

Open castholm opened this issue 1 year ago • 3 comments

I documented the pdex.bin file format. It is essentially a stripped-down ELF file consisting of metadata, a program segment and relocation entries.

I also replaced the pdex2elf.py with pdex2elf.ps1. pdex2elf.py does not actually work with pdex.bin files. I'm late to the Playdate game but I suspect (much) older versions of the SDK produced executable files in a much different format from what is in use currently.

The new pdex2elf.ps1 script creates well-formed ELF file that can be analyzed by readelf or objdump and decompiled by Ghidra, and it can even be compiled back by pdc into a bit-for-bit idential copy of the original pdex.bin. I tested it with both some of my own WIP games as well as some non-encrypted games from the catalog and they round-tripped perfectly.

It is a PowerShell script which I expect to be a bit controversial 😛 but PS is the only shell scripting-like language I'm proficient in so take it for what it is. If you would like to port the functionality to Python or whatever you have my blessing.

castholm avatar Dec 28 '23 20:12 castholm

@jaames Pinging just in case you haven't yet seen this PR.

castholm avatar Mar 17 '24 00:03 castholm