mirror of
https://github.com/jakcron/nstool
synced 2024-11-15 02:06:40 +00:00
[nx|nstool] Add nro.h and nrr.h.
This commit is contained in:
parent
57f91da709
commit
aaffe12e8a
8 changed files with 101 additions and 11 deletions
|
@ -12,16 +12,16 @@ namespace nx
|
||||||
public:
|
public:
|
||||||
struct sModuleId
|
struct sModuleId
|
||||||
{
|
{
|
||||||
byte_t data[nso::kModuleIdLen];
|
byte_t data[nso::kModuleIdSize];
|
||||||
|
|
||||||
void operator=(const sModuleId& other)
|
void operator=(const sModuleId& other)
|
||||||
{
|
{
|
||||||
memcpy(data, other.data, nso::kModuleIdLen);
|
memcpy(data, other.data, nso::kModuleIdSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const sModuleId& other) const
|
bool operator==(const sModuleId& other) const
|
||||||
{
|
{
|
||||||
return memcmp(data, other.data, nso::kModuleIdLen) == 0;
|
return memcmp(data, other.data, nso::kModuleIdSize) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const sModuleId& other) const
|
bool operator!=(const sModuleId& other) const
|
||||||
|
|
45
lib/libnx/include/nx/nro.h
Normal file
45
lib/libnx/include/nx/nro.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#pragma once
|
||||||
|
#include <fnd/types.h>
|
||||||
|
#include <crypto/sha.h>
|
||||||
|
#include <nx/macro.h>
|
||||||
|
|
||||||
|
namespace nx
|
||||||
|
{
|
||||||
|
namespace nro
|
||||||
|
{
|
||||||
|
static const uint32_t kNroSig = _MAKE_STRUCT_SIGNATURE("NRO0");
|
||||||
|
|
||||||
|
|
||||||
|
static const uint32_t kDefaultFormatVersion = 0;
|
||||||
|
static const size_t kRoCrtSize = 8;
|
||||||
|
static const size_t kModuleIdSize = 32;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma pack(push,1)
|
||||||
|
struct sNroSection
|
||||||
|
{
|
||||||
|
le_uint32_t memory_offset;
|
||||||
|
le_uint32_t size;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct sNroHeader
|
||||||
|
{
|
||||||
|
byte_t ro_crt[nro::kRoCrtSize];
|
||||||
|
byte_t reserved_0[8];
|
||||||
|
le_uint32_t signature;
|
||||||
|
le_uint32_t format_version;
|
||||||
|
le_uint32_t size;
|
||||||
|
le_uint32_t flags;
|
||||||
|
sNroSection text;
|
||||||
|
sNroSection ro;
|
||||||
|
sNroSection data;
|
||||||
|
le_uint32_t bss_size;
|
||||||
|
byte_t reserved_1[4];
|
||||||
|
byte_t module_id[nro::kModuleIdSize];
|
||||||
|
byte_t reserved_2[8];
|
||||||
|
sNroSection embedded;
|
||||||
|
sNroSection dyn_str;
|
||||||
|
sNroSection dyn_sym;
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
}
|
36
lib/libnx/include/nx/nrr.h
Normal file
36
lib/libnx/include/nx/nrr.h
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#pragma once
|
||||||
|
#include <fnd/types.h>
|
||||||
|
#include <crypto/rsa.h>
|
||||||
|
#include <nx/macro.h>
|
||||||
|
|
||||||
|
namespace nx
|
||||||
|
{
|
||||||
|
namespace nrr
|
||||||
|
{
|
||||||
|
static const uint32_t kNrrSig = _MAKE_STRUCT_SIGNATURE("NRR0");
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma pack(push,1)
|
||||||
|
struct sNrrCertificate
|
||||||
|
{
|
||||||
|
le_uint64_t application_id_mask;
|
||||||
|
le_uint64_t application_id_pattern;
|
||||||
|
byte_t nrr_body_modulus[crypto::rsa::kRsa2048Size];
|
||||||
|
byte_t nrr_cert_signature[crypto::rsa::kRsa2048Size];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct sNrrHeader
|
||||||
|
{
|
||||||
|
le_uint32_t signature;
|
||||||
|
byte_t reserved_0[28];
|
||||||
|
sNrrCertificate certificate;
|
||||||
|
byte_t nrr_body_signature[crypto::rsa::kRsa2048Size];
|
||||||
|
le_uint64_t application_id;
|
||||||
|
le_uint32_t size;
|
||||||
|
byte_t reserved_1[4];
|
||||||
|
le_uint32_t hash_offset;
|
||||||
|
le_uint32_t hash_count;
|
||||||
|
byte_t reserved_2[8];
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
}
|
|
@ -1,9 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <string>
|
|
||||||
#include <fnd/types.h>
|
#include <fnd/types.h>
|
||||||
#include <fnd/List.h>
|
|
||||||
#include <crypto/sha.h>
|
#include <crypto/sha.h>
|
||||||
#include <fnd/ISerialiseableBinary.h>
|
|
||||||
#include <nx/macro.h>
|
#include <nx/macro.h>
|
||||||
|
|
||||||
namespace nx
|
namespace nx
|
||||||
|
@ -23,7 +20,7 @@ namespace nx
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint32_t kDefaultFormatVersion = 0;
|
static const uint32_t kDefaultFormatVersion = 0;
|
||||||
static const size_t kModuleIdLen = 32;
|
static const size_t kModuleIdSize = 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma pack(push,1)
|
#pragma pack(push,1)
|
||||||
|
@ -52,7 +49,7 @@ namespace nx
|
||||||
le_uint32_t module_name_size;
|
le_uint32_t module_name_size;
|
||||||
sNsoCodeSegment data;
|
sNsoCodeSegment data;
|
||||||
le_uint32_t bss_size;
|
le_uint32_t bss_size;
|
||||||
byte_t module_id[nso::kModuleIdLen];
|
byte_t module_id[nso::kModuleIdSize];
|
||||||
le_uint32_t text_file_size;
|
le_uint32_t text_file_size;
|
||||||
le_uint32_t ro_file_size;
|
le_uint32_t ro_file_size;
|
||||||
le_uint32_t data_file_size;
|
le_uint32_t data_file_size;
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
<ClInclude Include="include\nx\KernelCapability.h" />
|
<ClInclude Include="include\nx\KernelCapability.h" />
|
||||||
<ClInclude Include="include\nx\KernelVersionEntry.h" />
|
<ClInclude Include="include\nx\KernelVersionEntry.h" />
|
||||||
<ClInclude Include="include\nx\KernelVersionHandler.h" />
|
<ClInclude Include="include\nx\KernelVersionHandler.h" />
|
||||||
|
<ClInclude Include="include\nx\macro.h" />
|
||||||
<ClInclude Include="include\nx\MemoryMappingHandler.h" />
|
<ClInclude Include="include\nx\MemoryMappingHandler.h" />
|
||||||
<ClInclude Include="include\nx\MemoryPageEntry.h" />
|
<ClInclude Include="include\nx\MemoryPageEntry.h" />
|
||||||
<ClInclude Include="include\nx\MiscFlagsEntry.h" />
|
<ClInclude Include="include\nx\MiscFlagsEntry.h" />
|
||||||
|
@ -54,6 +55,8 @@
|
||||||
<ClInclude Include="include\nx\NpdmBinary.h" />
|
<ClInclude Include="include\nx\NpdmBinary.h" />
|
||||||
<ClInclude Include="include\nx\NpdmHeader.h" />
|
<ClInclude Include="include\nx\NpdmHeader.h" />
|
||||||
<ClInclude Include="include\nx\NcaHeader.h" />
|
<ClInclude Include="include\nx\NcaHeader.h" />
|
||||||
|
<ClInclude Include="include\nx\nro.h" />
|
||||||
|
<ClInclude Include="include\nx\nrr.h" />
|
||||||
<ClInclude Include="include\nx\nso.h" />
|
<ClInclude Include="include\nx\nso.h" />
|
||||||
<ClInclude Include="include\nx\NsoHeader.h" />
|
<ClInclude Include="include\nx\NsoHeader.h" />
|
||||||
<ClInclude Include="include\nx\NXCrypto.h" />
|
<ClInclude Include="include\nx\NXCrypto.h" />
|
||||||
|
|
|
@ -165,6 +165,15 @@
|
||||||
<ClInclude Include="include\nx\dynamic_symbol.h">
|
<ClInclude Include="include\nx\dynamic_symbol.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="include\nx\macro.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="include\nx\nro.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="include\nx\nrr.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="makefile" />
|
<None Include="makefile" />
|
||||||
|
|
|
@ -53,7 +53,7 @@ void nx::NsoHeader::exportBinary()
|
||||||
uint32_t flags = 0;
|
uint32_t flags = 0;
|
||||||
|
|
||||||
// set moduleid
|
// set moduleid
|
||||||
memcpy(hdr->module_id, mModuleId.data, nso::kModuleIdLen);
|
memcpy(hdr->module_id, mModuleId.data, nso::kModuleIdSize);
|
||||||
|
|
||||||
// set bss size
|
// set bss size
|
||||||
hdr->bss_size = mBssSize;
|
hdr->bss_size = mBssSize;
|
||||||
|
@ -152,7 +152,7 @@ void nx::NsoHeader::importBinary(const byte_t* bytes, size_t len)
|
||||||
throw fnd::Exception(kModuleName, "NSO header corrupt (unsupported format version)");
|
throw fnd::Exception(kModuleName, "NSO header corrupt (unsupported format version)");
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(mModuleId.data, hdr->module_id, nso::kModuleIdLen);
|
memcpy(mModuleId.data, hdr->module_id, nso::kModuleIdSize);
|
||||||
|
|
||||||
mBssSize = hdr->bss_size.get();
|
mBssSize = hdr->bss_size.get();
|
||||||
|
|
||||||
|
|
|
@ -215,7 +215,7 @@ void NsoProcess::displayHeader()
|
||||||
|
|
||||||
printf("[NSO Header]\n");
|
printf("[NSO Header]\n");
|
||||||
printf(" ModuleId: ");
|
printf(" ModuleId: ");
|
||||||
_HEXDUMP_L(mHdr.getModuleId().data, nx::nso::kModuleIdLen);
|
_HEXDUMP_L(mHdr.getModuleId().data, nx::nso::kModuleIdSize);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf(" Program Segments:\n");
|
printf(" Program Segments:\n");
|
||||||
printf(" .module_name:\n");
|
printf(" .module_name:\n");
|
||||||
|
|
Loading…
Reference in a new issue