Editing Making Isolated SPU Modules and Loaders

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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:
[[Category:OtherOS]]
=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 with aptitude.
* 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 loader
# print program header of decrypted SPU module


readelf -l dump_encdec_keys.elf
readelf -l dump_encdec_keys.elf
Line 214: Line 218:
   02    .unknown .unknown .unknown  
   02    .unknown .unknown .unknown  


# entry point is 0x12c00 which is in second program segment at file offset 0x100
# 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 second program segment.
# 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 second program segment.
# 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 241:
         ...
         ...


# now we copy our code to loader
# 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 loader
# 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
Line 298: Line 302:
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 />
{{Linux}}<noinclude>[[Category:Main]]</noinclude>
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br />
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)