ELF boot: scan segments for Wii mode detection, not sections

This commit is contained in:
Hector Martin 2016-11-23 04:03:13 +09:00
parent 3f11879640
commit a6742d9cf7
2 changed files with 6 additions and 5 deletions

View File

@ -35,12 +35,12 @@ bool CBoot::IsElfWii(const std::string& filename)
u32 HID4_mask = Common::swap32(0xfc1fffff);
ElfReader reader(elf.get());
for (int i = 0; i < reader.GetNumSections(); ++i)
for (int i = 0; i < reader.GetNumSegments(); ++i)
{
if (reader.IsCodeSection(i))
if (reader.IsCodeSegment(i))
{
u32* code = (u32*)reader.GetSectionDataPtr(i);
for (u32 j = 0; j < reader.GetSectionSize(i) / sizeof(u32); ++j)
u32* code = (u32*)reader.GetSegmentPtr(i);
for (u32 j = 0; j < reader.GetSegmentSize(i) / sizeof(u32); ++j)
{
if ((code[j] & HID4_mask) == HID4_pattern)
return true;

View File

@ -55,8 +55,9 @@ public:
else
return nullptr;
}
bool IsCodeSection(int section) const { return sections[section].sh_type == SHT_PROGBITS; }
bool IsCodeSegment(int segment) const { return segments[segment].p_flags & PF_X; }
const u8* GetSegmentPtr(int segment) { return GetPtr(segments[segment].p_offset); }
int GetSegmentSize(int segment) const { return segments[segment].p_filesz; }
u32 GetSectionAddr(SectionID section) const { return sectionAddrs[section]; }
int GetSectionSize(SectionID section) const { return sections[section].sh_size; }
SectionID GetSectionByName(const char* name, int firstSection = 0) const; //-1 for not found