From 817fb18e302fc2ddbdfdd7b84c0ee200500ba54c Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 5 Dec 2018 00:05:01 -0500 Subject: [PATCH 1/2] service/ldr: Corrent padding within the NRR header layout The padding after the magic signature value should be 12 bytes rather than 28 bytes. The other 16 should be placed after the title ID pattern. --- src/core/hle/service/ldr/ldr.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index ca119dd3a..2f6613476 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp @@ -436,9 +436,10 @@ private: struct NRRHeader { u32_le magic; - INSERT_PADDING_BYTES(0x1C); + INSERT_PADDING_BYTES(12); u64_le title_id_mask; u64_le title_id_pattern; + INSERT_PADDING_BYTES(16); std::array modulus; std::array signature_1; std::array signature_2; From 05a6f1f676386074ce28c2459b689d92c08a3171 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 5 Dec 2018 00:16:47 -0500 Subject: [PATCH 2/2] service/ldr: Amend layout of the NRO header The first word is just a padding byte, it's not an actual entry instruction. Also renames the rest of the entries according to SwitchBrew. --- src/core/hle/service/ldr/ldr.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index 2f6613476..a81699a5a 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp @@ -414,13 +414,13 @@ private: using SHA256Hash = std::array; struct NROHeader { - u32_le entrypoint_insn; + INSERT_PADDING_WORDS(1); u32_le mod_offset; INSERT_PADDING_WORDS(2); u32_le magic; - INSERT_PADDING_WORDS(1); + u32_le version; u32_le nro_size; - INSERT_PADDING_WORDS(1); + u32_le flags; u32_le text_offset; u32_le text_size; u32_le ro_offset;