program_metadata: Add getters for ACID/ACI0 FAC and SAC regions

This commit is contained in:
Zach Hilman
2019-07-06 20:56:44 -04:00
parent a1b8e5d09a
commit 0ed849fd62
2 changed files with 35 additions and 0 deletions

View File

@@ -48,6 +48,15 @@ Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) {
return Loader::ResultStatus::ErrorBadKernelCapabilityDescriptors;
}
acid_file_access_raw =
file->ReadBytes(acid_header.fac_size, npdm_header.acid_offset + acid_header.fac_offset);
aci0_file_access_raw =
file->ReadBytes(aci_header.fah_size, npdm_header.aci_offset + aci_header.fah_offset);
acid_service_access_raw =
file->ReadBytes(acid_header.sac_size, npdm_header.acid_offset + acid_header.sac_offset);
aci0_service_access_raw =
file->ReadBytes(aci_header.sac_size, npdm_header.aci_offset + aci_header.sac_offset);
return Loader::ResultStatus::Success;
}
@@ -66,6 +75,22 @@ void ProgramMetadata::LoadManual(bool is_64_bit, ProgramAddressSpaceType address
aci_kernel_capabilities = std ::move(capabilities);
}
std::vector<u8> ProgramMetadata::GetACIDFileAccessControl() const {
return acid_file_access_raw;
}
std::vector<u8> ProgramMetadata::GetACI0FileAccessControl() const {
return aci0_file_access_raw;
}
std::vector<u8> ProgramMetadata::GetACIDServiceAccessControl() const {
return acid_service_access_raw;
}
std::vector<u8> ProgramMetadata::GetACI0ServiceAccessControl() const {
return aci0_service_access_raw;
}
bool ProgramMetadata::Is64BitProgram() const {
return npdm_header.has_64_bit_instructions;
}

View File

@@ -61,6 +61,11 @@ public:
u32 GetSystemResourceSize() const;
const KernelCapabilityDescriptors& GetKernelCapabilities() const;
std::vector<u8> GetACIDFileAccessControl() const;
std::vector<u8> GetACI0FileAccessControl() const;
std::vector<u8> GetACIDServiceAccessControl() const;
std::vector<u8> GetACI0ServiceAccessControl() const;
void Print() const;
private:
@@ -164,6 +169,11 @@ private:
FileAccessControl acid_file_access;
FileAccessHeader aci_file_access;
std::vector<u8> acid_file_access_raw;
std::vector<u8> aci0_file_access_raw;
std::vector<u8> acid_service_access_raw;
std::vector<u8> aci0_service_access_raw;
KernelCapabilityDescriptors aci_kernel_capabilities;
};