/// Usually placed right after NsoHeader, but it's actual offset may vary.
/// If the 'module_name_size' member from NsoHeader is greater than 1 and the 'name_length' element from NsoModuleName is greater than 0, 'name' will hold the module name.
typedefstruct{
u8name_length;
charname[];
}NsoModuleName;
/// Placed at the very start of the decompressed .text segment.
typedefstruct{
u32entry_point;
u32mod_offset;///< NsoModHeader block offset (relative to the start of this header). Almost always set to 0x8 (the size of this struct).
}NsoModStart;
/// This is essentially a replacement for the PT_DYNAMIC program header available in ELF binaries.
/// All offsets are signed 32-bit values relative to the start of this header.
/// This is usually placed at the start of the decompressed .text segment, right after a NsoModStart block.
/// However, in some NSOs, it can instead be placed at the start of the uncompressed .rodata segment, right after its NsoModuleInfo block.
/// In these cases, the 'mod_offset' value from the NsoModStart block will point to an offset within the .rodata segment.
typedefstruct{
u32magic;///< "MOD0".
s32dynamic_offset;
s32bss_start_offset;
s32bss_end_offset;
s32eh_frame_hdr_start_offset;
s32eh_frame_hdr_end_offset;
s32module_object_offset;///< Typically equal to .bss base.
}NsoModHeader;
/// Placed at the start of the decompressed .rodata segment + 0x4.
/// If the 'name_length' element is greater than 0, 'name' will hold the module name.