From 0ed849fd62d53b7a14b2e9948a08c2c7c433e004 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Sat, 6 Jul 2019 20:56:44 -0400 Subject: [PATCH] program_metadata: Add getters for ACID/ACI0 FAC and SAC regions --- src/core/file_sys/program_metadata.cpp | 25 +++++++++++++++++++++++++ src/core/file_sys/program_metadata.h | 10 ++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/core/file_sys/program_metadata.cpp b/src/core/file_sys/program_metadata.cpp index 7310b36026..ab7a9dabb9 100644 --- a/src/core/file_sys/program_metadata.cpp +++ b/src/core/file_sys/program_metadata.cpp @@ -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 ProgramMetadata::GetACIDFileAccessControl() const { + return acid_file_access_raw; +} + +std::vector ProgramMetadata::GetACI0FileAccessControl() const { + return aci0_file_access_raw; +} + +std::vector ProgramMetadata::GetACIDServiceAccessControl() const { + return acid_service_access_raw; +} + +std::vector ProgramMetadata::GetACI0ServiceAccessControl() const { + return aci0_service_access_raw; +} + bool ProgramMetadata::Is64BitProgram() const { return npdm_header.has_64_bit_instructions; } diff --git a/src/core/file_sys/program_metadata.h b/src/core/file_sys/program_metadata.h index 88ec97d85f..d943242e29 100644 --- a/src/core/file_sys/program_metadata.h +++ b/src/core/file_sys/program_metadata.h @@ -61,6 +61,11 @@ public: u32 GetSystemResourceSize() const; const KernelCapabilityDescriptors& GetKernelCapabilities() const; + std::vector GetACIDFileAccessControl() const; + std::vector GetACI0FileAccessControl() const; + std::vector GetACIDServiceAccessControl() const; + std::vector GetACI0ServiceAccessControl() const; + void Print() const; private: @@ -164,6 +169,11 @@ private: FileAccessControl acid_file_access; FileAccessHeader aci_file_access; + std::vector acid_file_access_raw; + std::vector aci0_file_access_raw; + std::vector acid_service_access_raw; + std::vector aci0_service_access_raw; + KernelCapabilityDescriptors aci_kernel_capabilities; };