Răsfoiți Sursa

elf: Check if machine is ARM.

bunnei 9 ani în urmă
părinte
comite
1c4f9e822c
1 a modificat fișierele cu 9 adăugiri și 2 ștergeri
  1. 9 2
      src/core/loader/elf.cpp

+ 9 - 2
src/core/loader/elf.cpp

@@ -364,12 +364,19 @@ SectionID ElfReader::GetSectionByName(const char* name, int firstSection) const
 namespace Loader {
 namespace Loader {
 
 
 FileType AppLoader_ELF::IdentifyType(FileUtil::IOFile& file) {
 FileType AppLoader_ELF::IdentifyType(FileUtil::IOFile& file) {
-    u32 magic;
+    static constexpr u16 ELF_MACHINE_ARM{0x28};
+
+    u32 magic = 0;
     file.Seek(0, SEEK_SET);
     file.Seek(0, SEEK_SET);
     if (1 != file.ReadArray<u32>(&magic, 1))
     if (1 != file.ReadArray<u32>(&magic, 1))
         return FileType::Error;
         return FileType::Error;
 
 
-    if (MakeMagic('\x7f', 'E', 'L', 'F') == magic)
+    u16 machine = 0;
+    file.Seek(18, SEEK_SET);
+    if (1 != file.ReadArray<u16>(&machine, 1))
+        return FileType::Error;
+
+    if (MakeMagic('\x7f', 'E', 'L', 'F') == magic && ELF_MACHINE_ARM == machine)
         return FileType::ELF;
         return FileType::ELF;
 
 
     return FileType::Error;
     return FileType::Error;