bool CFileSystemGCWii::ExportApploader(const std::string& _rExportFolder) const { u32 apploader_size; u32 trailer_size; const u32 header_size = 0x20; if (!m_rVolume->ReadSwapped(0x2440 + 0x14, &apploader_size, m_Wii) || !m_rVolume->ReadSwapped(0x2440 + 0x18, &trailer_size, m_Wii)) return false; apploader_size += trailer_size + header_size; DEBUG_LOG(DISCIO, "Apploader size -> %x", apploader_size); std::vector<u8> buffer(apploader_size); if (m_rVolume->Read(0x2440, apploader_size, buffer.data(), m_Wii)) { std::string exportName(_rExportFolder + "/apploader.img"); File::IOFile AppFile(exportName, "wb"); if (AppFile) { AppFile.WriteBytes(buffer.data(), apploader_size); return true; } } return false; }
bool CFileSystemGCWii::ExportDOL(const std::string& _rExportFolder) const { u32 DolOffset = m_rVolume->Read32(0x420, m_Wii) << GetOffsetShift(); u32 DolSize = GetBootDOLSize(); std::vector<u8> buffer(DolSize); if (m_rVolume->Read(DolOffset, DolSize, &buffer[0], m_Wii)) { std::string exportName(_rExportFolder + "/boot.dol"); File::IOFile DolFile(exportName, "wb"); if (DolFile) { DolFile.WriteBytes(&buffer[0], DolSize); return true; } } return false; }
bool CFileSystemGCWii::ExportApploader(const std::string& _rExportFolder) const { u32 AppSize = m_rVolume->Read32(0x2440 + 0x14, m_Wii); // apploader size AppSize += m_rVolume->Read32(0x2440 + 0x18, m_Wii); // + trailer size AppSize += 0x20; // + header size DEBUG_LOG(DISCIO,"AppSize -> %x", AppSize); std::vector<u8> buffer(AppSize); if (m_rVolume->Read(0x2440, AppSize, &buffer[0], m_Wii)) { std::string exportName(_rExportFolder + "/apploader.img"); File::IOFile AppFile(exportName, "wb"); if (AppFile) { AppFile.WriteBytes(&buffer[0], AppSize); return true; } } return false; }