draugr.git


draugr

~ single ELF file analysis tool
git clone https://github.com/djnnvx/draugr.git
log | files | refs | archive | README

commit 22626b6176097330ec27f9458037d7b5bef2ffd9
parent 072e9b821193d178c130d60c4ae736fad6394ce0
Author: djnn <[email protected]>
Date: Sat, 22 Aug 2026 00:27:46 +0900

feat(elf): more elf types^-^

Diffstat:
Melf/elf.odin | 44++++++++++++++++++++++++++++++++++++--------
Melf/printer.odin | 44++++++++++++++++++++++++++++++++++++--------

2 files changed, 72 insertions(+), 16 deletions(-)

diff --git a/elf/elf.odin b/elf/elf.odin
@@ -21,14 +21,42 @@ ET_EXEC :: 2
 ET_DYN  :: 3
 ET_CORE :: 4
 
-EM_386     :: 3
-EM_MIPS    :: 8
-EM_PPC     :: 20
-EM_PPC64   :: 21
-EM_ARM     :: 40
-EM_X86_64  :: 62
-EM_AARCH64 :: 183
-EM_RISCV   :: 243
+EM_SPARC        :: 2
+EM_386          :: 3
+EM_68K          :: 4
+EM_MIPS         :: 8
+EM_MIPS_RS3_LE  :: 10
+EM_PARISC       :: 15
+EM_PPC          :: 20
+EM_PPC64        :: 21
+EM_S390         :: 22
+EM_ARM          :: 40
+EM_SH           :: 42
+EM_SPARCV9      :: 43
+EM_ARC          :: 45
+EM_IA_64        :: 50
+EM_X86_64       :: 62
+EM_CRIS         :: 76
+EM_AVR          :: 83
+EM_FR30         :: 84
+EM_V850         :: 87
+EM_M32R         :: 88
+EM_OPENRISC     :: 92
+EM_ARC_COMPACT  :: 93
+EM_XTENSA       :: 94
+EM_MSP430       :: 105
+EM_BLACKFIN     :: 106
+EM_UNICORE      :: 110
+EM_TI_C6000     :: 140
+EM_NDS32        :: 167
+EM_AARCH64      :: 183
+EM_MICROBLAZE   :: 189
+EM_TILEGX       :: 191
+EM_ARC_COMPACT2 :: 195
+EM_RISCV        :: 243
+EM_BPF          :: 247
+EM_CSKY         :: 252
+EM_LOONGARCH    :: 258
 
 PT_NULL    :: 0
 PT_LOAD    :: 1
diff --git a/elf/printer.odin b/elf/printer.odin
@@ -129,14 +129,42 @@ type_to_str :: proc(t: u16) -> string {
 
 machine_to_str :: proc(m: u16) -> string {
 	switch m {
-	case EM_386:     return "x86 (i386)"
-	case EM_MIPS:    return "MIPS"
-	case EM_PPC:     return "PowerPC"
-	case EM_PPC64:   return "PowerPC64"
-	case EM_ARM:     return "ARM"
-	case EM_X86_64:  return "x86-64"
-	case EM_AARCH64: return "AArch64"
-	case EM_RISCV:   return "RISC-V"
+	case EM_SPARC:        return "SPARC"
+	case EM_386:          return "x86 (i386)"
+	case EM_68K:          return "m68k"
+	case EM_MIPS:         return "MIPS"
+	case EM_MIPS_RS3_LE:  return "MIPS RS3 LE"
+	case EM_PARISC:       return "PA-RISC"
+	case EM_PPC:          return "PowerPC"
+	case EM_PPC64:        return "PowerPC64"
+	case EM_S390:         return "S/390"
+	case EM_ARM:          return "ARM"
+	case EM_SH:           return "SuperH"
+	case EM_SPARCV9:      return "SPARC V9"
+	case EM_ARC:          return "ARC"
+	case EM_IA_64:        return "IA-64"
+	case EM_X86_64:       return "x86-64"
+	case EM_CRIS:         return "CRIS"
+	case EM_AVR:          return "AVR"
+	case EM_FR30:         return "FR30"
+	case EM_V850:         return "V850"
+	case EM_M32R:         return "M32R"
+	case EM_OPENRISC:     return "OpenRISC"
+	case EM_ARC_COMPACT:  return "ARCompact"
+	case EM_XTENSA:       return "Xtensa"
+	case EM_MSP430:       return "MSP430"
+	case EM_BLACKFIN:     return "Blackfin"
+	case EM_UNICORE:      return "UniCore"
+	case EM_TI_C6000:     return "TI C6000"
+	case EM_NDS32:        return "NDS32"
+	case EM_AARCH64:      return "AArch64"
+	case EM_MICROBLAZE:   return "MicroBlaze"
+	case EM_TILEGX:       return "TILE-Gx"
+	case EM_ARC_COMPACT2: return "ARCv2"
+	case EM_RISCV:        return "RISC-V"
+	case EM_BPF:          return "BPF"
+	case EM_CSKY:         return "C-SKY"
+	case EM_LOONGARCH:    return "LoongArch"
 	}
 	return fmt.tprintf("Unknown (%d)", m)
 }