SjCRUNCH v2.1 - by Sjeep
------------------------
SjCRUNCH is an ELF packer for the PS2. It uses the LZO compression library to
create a compressed version of the input elf, which is then decompressed (VERY
quickly, thanks to the LZO algo) at runtime. It consists of a PC-side
tool and script, and a EE-side decompression stub. The PC-side tool creates a
"memory image" of the input ELF then compresses this image. The compressed
image is then linked with the EE-side decompression stub, forming a
self-extracting elf.
SjCRUNCH relies on ee-gcc, ee-as and ee-ld. You must have these tools installed
before you can use SjCRUNCH. Also, the PC-side script is written for the bash
shell - so you must either have bash installed (for linux, cygwin, whatever) or
re-write the script for a different interpreter :)
Usage directions:
-----------------
Extract the contents of the archive. Then, move the "sjcrunch" file from the
script/ directory to a directory within your path (ie: /usr/local/ps2dev/bin).
Open the sjcrunch script in a text editor, and edit the following variables
to match your setup:
SJCRUNCH_PATH - this must point to the script/ dir from the SjCRUNCH archive.
SJCRUNCH_PACKER - this must point to the packer executable (which is generally
stored within the script/ directory).
EE_GCC - this must point to ee-gcc. If ee-gcc is not in your path, then it must
be an absolute filename.
Now you are ready to go. To pack an elf, use the following command: (assuming
that sjcrunch is now correctly install and is in your path)
sjcrunch INPUT.ELF OUTPUT.ELF [START ADDRESS]
The input and output ELF's may be the same file. The start address is optional,
and in hexadecimal format (ie: 0x1b00000)
Notes:
------
* The start address of the resulting packed elf may be specified when sjcrunch
is invoked. Use this to prevent elf load location conflicts.
* Adresd has done some experimenting with the RNC compression algorithm, and
has modified SjCRUNCH to use this. In general, RNC does achieve a better
compression ratio than LZO. Contact Adresd if you are interested in the RNC
implementation
* Have fun :)
Changes from v2.0:
------------------
* The depacker stub now passes arguments to the packed elf (dont know why
I wasnt doing this originally).
* Fixed a problem preventing ELF's packed with SjCRUNCH from loading via
the AR2 swap.
Changes from v0.3:
------------------
* SjCRUNCH now builds the elf "memory image" using program headers instead of
elf section headers.
* The de-packed elf is now started using the ExecPS2 system call, which is much
safer than simply jumping to the de-packed code (which the older release did).
* The start address of the resulting packed elf may now be specified on the
command line.
* Works with GCC 3.2.2
- Sjeep
e-mail: sjeep()gamebase.ca
| |