nstool/lib/libnx/include/nx/nso.h

70 lines
1.3 KiB
C
Raw Normal View History

2018-05-27 11:25:28 +00:00
#pragma once
#include <string>
#include <fnd/types.h>
#include <fnd/List.h>
#include <crypto/sha.h>
#include <fnd/ISerialiseableBinary.h>
#include <nx/macro.h>
2018-05-27 11:25:28 +00:00
namespace nx
{
namespace nso
{
static const uint32_t kNsoSig = _MAKE_STRUCT_SIGNATURE("NSO0");
2018-05-27 11:25:28 +00:00
enum HeaderFlags
{
FLAG_TEXT_COMPRESS,
FLAG_RO_COMPRESS,
FLAG_DATA_COMPRESS,
FLAG_TEXT_HASH,
FLAG_RO_HASH,
FLAG_DATA_HASH
2018-05-27 12:33:39 +00:00
};
2018-05-27 11:25:28 +00:00
static const uint32_t kDefaultFormatVersion = 0;
2018-05-27 11:25:28 +00:00
static const size_t kModuleIdLen = 32;
}
#pragma pack(push,1)
struct sNsoCodeSegment
{
le_uint32_t file_offset;
le_uint32_t memory_offset;
le_uint32_t size;
};
struct sNsoSection
{
le_uint32_t offset;
le_uint32_t size;
2018-05-27 12:33:39 +00:00
};
2018-05-27 11:25:28 +00:00
struct sNsoHeader
{
le_uint32_t signature;
le_uint32_t format_version;
2018-05-27 11:25:28 +00:00
byte_t reserved_1[4];
le_uint32_t flags;
sNsoCodeSegment text;
le_uint32_t module_name_offset;
sNsoCodeSegment ro;
le_uint32_t module_name_size;
sNsoCodeSegment data;
le_uint32_t bss_size;
byte_t module_id[nso::kModuleIdLen];
le_uint32_t text_file_size;
le_uint32_t ro_file_size;
le_uint32_t data_file_size;
byte_t reserved_2[28];
sNsoSection embedded;
sNsoSection dyn_str;
sNsoSection dyn_sym;
crypto::sha::sSha256Hash text_hash;
crypto::sha::sSha256Hash ro_hash;
crypto::sha::sSha256Hash data_hash;
2018-05-27 11:25:28 +00:00
};
#pragma pack(pop)
}