Editing Talk:PRX

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 25: Line 25:


lv2: prolly calculation via elf header and descriptors, its all in there -- [[User:Mysis|Mysis]]
lv2: prolly calculation via elf header and descriptors, its all in there -- [[User:Mysis|Mysis]]
= PPURELA Segment =
I am not sure why hasn't this been mentioned yet. Its PHDR type value is: 0x700000A4 (PT_SCE_PPURELA). It seems to be just a big table with following entries:
<pre>
struct {
    u64 offset; // Offset in the second load segment
    u16 unk0;  // ???
    u8  index;  // Seems that: 0 -> First LOAD segment, 1 -> Second LOAD segment
    u8  type;  // ??? Not sure what happens when type != 1.
    u32 unk1;  // ???
    u64 ptr;    // Offset of the pointer (while patching add the base address where the segment was allocated).
};
</pre>
My guess is that this segment is used to patch the addresses of the second LOAD segments like this (this may be wrong, but so far it has been proven to work for my emulator's dynamic loader):
<pre>
for (auto& rel : ppurela_table) {
    if (rel.type == 1) {
        const u32 addr = prx->load_segments[1].addr + rel.offset;
        const u32 value = prx->load_segments[rel.index].addr + rel.ptr;
        write32(addr, value);
    }
}
</pre>
Has anyone worked on this previously? / Can someone confirm this? -- [[User:AlexAltea|AlexAltea]]
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)