Editing Making Isolated SPU Modules and Loaders
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
=Introduction= | =Introduction= | ||
Line 13: | Line 12: | ||
* You need SPU GCC compiler to compile your code and create binary version of it. | * You need SPU GCC compiler to compile your code and create binary version of it. | ||
* On PS3 Debian, just install spu toolchain | * On PS3 Debian, just install spu toolchain. | ||
* You can also cross-compile SPU GCC toolchain for your Linux PC. | * You can also cross-compile SPU GCC toolchain for your Linux PC. | ||
* See http://gitorious.ps3dev.net/ps3linux/powerpc64-cross-compiler if you want to build SPU GCC cross-compiler. Just change in HOWTO target option from powerpc64-linux to spu-elf. | * See http://gitorious.ps3dev.net/ps3linux/powerpc64-cross-compiler if you want to build SPU GCC cross-compiler. Just change in HOWTO target option from powerpc64-linux to spu-elf. | ||
Line 169: | Line 168: | ||
hexdump -C /mnt/arg1 | hexdump -C /mnt/arg1 | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | |||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | |||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | |||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | |||
<br /><br /><br /> | |||
=Example: Making dump_encdec_keys.self= | =Example: Making dump_encdec_keys.self= | ||
Line 194: | Line 198: | ||
mv lv1ldr.elf dump_encdec_keys.elf | mv lv1ldr.elf dump_encdec_keys.elf | ||
# print program header of decrypted | # print program header of decrypted SPU module | ||
glevand@debian:~$ readelf -l dump_encdec_keys.elf | |||
readelf -l dump_encdec_keys.elf | |||
Elf file type is EXEC (Executable file) | Elf file type is EXEC (Executable file) | ||
Line 214: | Line 217: | ||
02 .unknown .unknown .unknown | 02 .unknown .unknown .unknown | ||
# entry point is 0x12c00 which is in | # entry point is 0x12c00 which is in first program segment at file offset 0x100 | ||
# now we kill all old code and data with 0s before we put our code there. | # now we kill all old code and data with 0s before we put our code there. | ||
# seek parameter is the offset of the | # seek parameter is the offset of the first program segment. | ||
# count parameter is the sum of the offset of the last program segment plus its size and | # count parameter is the sum of the offset of the last program segment plus its size and | ||
# minus the offset of the | # minus the offset of the first program segmnet. | ||
# killing old code and data with 0s is a good idea because 0x00000000 means stop opcode. | # killing old code and data with 0s is a good idea because 0x00000000 means stop opcode. | ||
Line 237: | Line 240: | ||
... | ... | ||
# now we copy our code to | # now we copy our code to SPU module | ||
# seek parameter is the entry point offset in file | # seek parameter is the entry point offset in file | ||
dd if=dump_encdec_keys.bin of=dump_encdec_keys.elf bs=1 seek=$((0x100)) conv=notrunc | dd if=dump_encdec_keys.bin of=dump_encdec_keys.elf bs=1 seek=$((0x100)) conv=notrunc | ||
# now build | # now build isolated SPU module | ||
iso_rebuilder dump_encdec_keys.elf dump_encdec_keys.self lv1ldr | iso_rebuilder dump_encdec_keys.elf dump_encdec_keys.self lv1ldr | ||
# we are done :) | # we are done :) | ||
# time to test it with | # time to test it with spuisofs !!! | ||
# mount | # mount spuisofs (we do it of course on PS3 Linux and not on PC) | ||
# you could use my Debian LiveCD e.g. which has all tools you need | # you could use my Debian LiveCD e.g. which has all tools you need | ||
Line 294: | Line 297: | ||
# encrypted and accepted by metldr | # encrypted and accepted by metldr | ||
# dump your ENCDEC keys | # dump your ENCDEC keys | ||
hexdump -C /mnt/buf2 | hexdump -C /mnt/buf2 | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | |||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | |||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | |||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | |||
<br /><br /><br /> |