UNPKG

elflib

Version:
316 lines (315 loc) 16.2 kB
import * as ELF from './types/index.js'; export function isaToString(isa) { switch (isa) { case ELF.ISA.None: return 'No machine'; case ELF.ISA.M32: return 'AT&T WE 32100'; case ELF.ISA.SPARC: return 'SUN SPARC'; case ELF.ISA.x86: return 'Intel x86'; case ELF.ISA.ISA68K: return 'Motorola m68k family'; case ELF.ISA.ISA88K: return 'Motorola m88k family'; case ELF.ISA.IAMCU: return 'Intel MCU'; case ELF.ISA.ISA860: return 'Intel 80860'; case ELF.ISA.MIPS: return 'MIPS R3000 big-endian'; case ELF.ISA.S370: return 'IBM System/370'; case ELF.ISA.MIPS_RS3_LE: return 'MIPS R3000 little-endian'; case ELF.ISA.PARISC: return 'HPPA'; case ELF.ISA.VPP500: return 'Fujitsu VPP500'; case ELF.ISA.SPARC32PLUS: return 'Sun\'s "v8plus"'; case ELF.ISA.ISA960: return 'Intel 80960'; case ELF.ISA.PPC: return 'PowerPC'; case ELF.ISA.PPC64: return 'PowerPC 64-bit'; case ELF.ISA.S390: return 'IBM S390'; case ELF.ISA.SPU: return 'IBM SPU/SPC'; case ELF.ISA.V800: return 'NEC V800 series'; case ELF.ISA.FR20: return 'Fujitsu FR20'; case ELF.ISA.RH32: return 'TRW RH-32'; case ELF.ISA.RCE: return 'Motorola RCE'; case ELF.ISA.ARM: return 'ARM'; case ELF.ISA.FAKE_ALPHA: return 'Digital Alpha'; case ELF.ISA.SH: return 'Hitachi SH'; case ELF.ISA.SPARCV9: return 'SPARC v9 64-bit'; case ELF.ISA.TRICORE: return 'Siemens Tricore'; case ELF.ISA.ARC: return 'Argonaut RISC Core'; case ELF.ISA.H8_300: return 'Hitachi H8/300'; case ELF.ISA.H8_300H: return 'Hitachi H8/300H'; case ELF.ISA.H8S: return 'Hitachi H8S'; case ELF.ISA.H8_500: return 'Hitachi H8/500'; case ELF.ISA.IA_64: return 'Intel Merced'; case ELF.ISA.MIPS_X: return 'Stanford MIPS-X'; case ELF.ISA.COLDFIRE: return 'Motorola Coldfire'; case ELF.ISA.ISA68HC12: return 'Motorola M68HC12'; case ELF.ISA.MMA: return 'Fujitsu MMA Multimedia Accelerator'; case ELF.ISA.PCP: return 'Siemens PCP'; case ELF.ISA.NCPU: return 'Sony nCPU embeeded RISC'; case ELF.ISA.NDR1: return 'Denso NDR1 microprocessor'; case ELF.ISA.STARCORE: return 'Motorola Start*Core processor'; case ELF.ISA.ME16: return 'Toyota ME16 processor'; case ELF.ISA.ST100: return 'STMicroelectronic ST100 processor'; case ELF.ISA.TINYJ: return 'Advanced Logic Corp. Tinyj emb.fam'; case ELF.ISA.X86_64: return 'AMD x86-64 architecture'; case ELF.ISA.PDSP: return 'Sony DSP Processor'; case ELF.ISA.PDP10: return 'Digital PDP-10'; case ELF.ISA.PDP11: return 'Digital PDP-11'; case ELF.ISA.FX66: return 'Siemens FX66 microcontroller'; case ELF.ISA.ST9PLUS: return 'STMicroelectronics ST9+ 8/16 mc'; case ELF.ISA.ST7: return 'STmicroelectronics ST7 8 bit mc'; case ELF.ISA.ISA68HC16: return 'Motorola MC68HC16 microcontroller'; case ELF.ISA.ISA68HC11: return 'Motorola MC68HC11 microcontroller'; case ELF.ISA.ISA68HC08: return 'Motorola MC68HC08 microcontroller'; case ELF.ISA.ISA68HC05: return 'Motorola MC68HC05 microcontroller'; case ELF.ISA.SVX: return 'Silicon Graphics SVx'; case ELF.ISA.ST19: return 'STMicroelectronics ST19 8 bit mc'; case ELF.ISA.VAX: return 'Digital VAX'; case ELF.ISA.CRIS: return 'Axis Communications 32-bit emb.proc'; case ELF.ISA.JAVELIN: return 'Infineon Technologies 32-bit emb.proc'; case ELF.ISA.FIREPATH: return 'Element 14 64-bit DSP Processor'; case ELF.ISA.ZSP: return 'LSI Logic 16-bit DSP Processor'; case ELF.ISA.MMIX: return 'Donald Knuth\'s educational 64-bit proc'; case ELF.ISA.HUANY: return 'Harvard University machine-independent object files'; case ELF.ISA.PRISM: return 'SiTera Prism'; case ELF.ISA.AVR: return 'Atmel AVR 8-bit microcontroller'; case ELF.ISA.FR30: return 'Fujitsu FR30'; case ELF.ISA.D10V: return 'Mitsubishi D10V'; case ELF.ISA.D30V: return 'Mitsubishi D30V'; case ELF.ISA.V850: return 'NEC v850'; case ELF.ISA.M32R: return 'Mitsubishi M32R'; case ELF.ISA.MN10300: return 'Matsushita MN10300'; case ELF.ISA.MN10200: return 'Matsushita MN10200'; case ELF.ISA.PJ: return 'picoJava'; case ELF.ISA.OPENRISC: return 'OpenRISC 32-bit embedded processor'; case ELF.ISA.ARC_COMPACT: return 'ARC International ARCompact'; case ELF.ISA.XTENSA: return 'Tensilica Xtensa Architecture'; case ELF.ISA.VIDEOCORE: return 'Alphamosaic VideoCore'; case ELF.ISA.TMM_GPP: return 'Thompson Multimedia General Purpose Proc'; case ELF.ISA.NS32K: return 'National Semi. 32000'; case ELF.ISA.TPC: return 'Tenor Network TPC'; case ELF.ISA.SNP1K: return 'Trebia SNP 1000'; case ELF.ISA.ST200: return 'STMicroelectronics ST200'; case ELF.ISA.IP2K: return 'Ubicom IP2xxx'; case ELF.ISA.MAX: return 'MAX processor'; case ELF.ISA.CR: return 'National Semi. CompactRISC'; case ELF.ISA.F2MC16: return 'Fujitsu F2MC16'; case ELF.ISA.MSP430: return 'Texas Instruments msp430'; case ELF.ISA.BLACKFIN: return 'Analog Devices Blackfin DSP'; case ELF.ISA.SE_C33: return 'Seiko Epson S1C33 family'; case ELF.ISA.SEP: return 'Sharp embedded microprocessor'; case ELF.ISA.ARCA: return 'Arca RISC'; case ELF.ISA.UNICORE: return 'PKU-Unity & MPRC Peking Uni. mc series'; case ELF.ISA.EXCESS: return 'eXcess configurable cpu'; case ELF.ISA.DXP: return 'Icera Semi. Deep Execution Processor'; case ELF.ISA.ALTERA_NIOS2: return 'Altera Nios II'; case ELF.ISA.CRX: return 'National Semi. CompactRISC CRX'; case ELF.ISA.XGATE: return 'Motorola XGATE'; case ELF.ISA.C166: return 'Infineon C16x/XC16x'; case ELF.ISA.M16C: return 'Renesas M16C'; case ELF.ISA.DSPIC30F: return 'Microchip Technology dsPIC30F'; case ELF.ISA.CE: return 'Freescale Communication Engine RISC'; case ELF.ISA.M32C: return 'Renesas M32C'; case ELF.ISA.TSK3000: return 'Altium TSK3000'; case ELF.ISA.RS08: return 'Freescale RS08'; case ELF.ISA.SHARC: return 'Analog Devices SHARC family'; case ELF.ISA.ECOG2: return 'Cyan Technology eCOG2'; case ELF.ISA.SCORE7: return 'Sunplus S+core7 RISC'; case ELF.ISA.DSP24: return 'New Japan Radio (NJR) 24-bit DSP'; case ELF.ISA.VIDEOCORE3: return 'Broadcom VideoCore III'; case ELF.ISA.LATTICEMICO32: return 'RISC for Lattice FPGA'; case ELF.ISA.SE_C17: return 'Seiko Epson C17'; case ELF.ISA.TI_C6000: return 'Texas Instruments TMS320C6000 DSP'; case ELF.ISA.TI_C2000: return 'Texas Instruments TMS320C2000 DSP'; case ELF.ISA.TI_C5500: return 'Texas Instruments TMS320C55x DSP'; case ELF.ISA.TI_ARP32: return 'Texas Instruments App. Specific RISC'; case ELF.ISA.TI_PRU: return 'Texas Instruments Prog. Realtime Unit'; case ELF.ISA.MMDSP_PLUS: return 'STMicroelectronics 64bit VLIW DSP'; case ELF.ISA.CYPRESS_M8C: return 'Cypress M8C'; case ELF.ISA.R32C: return 'Renesas R32C'; case ELF.ISA.TRIMEDIA: return 'NXP Semi. TriMedia'; case ELF.ISA.QDSP6: return 'QUALCOMM DSP6'; case ELF.ISA.ISA8051: return 'Intel 8051 and variants'; case ELF.ISA.STXP7X: return 'STMicroelectronics STxP7x'; case ELF.ISA.NDS32: return 'Andes Tech. compact code emb. RISC'; case ELF.ISA.ECOG1X: return 'Cyan Technology eCOG1X'; case ELF.ISA.MAXQ30: return 'Dallas Semi. MAXQ30 mc'; case ELF.ISA.XIMO16: return 'New Japan Radio (NJR) 16-bit DSP'; case ELF.ISA.MANIK: return 'M2000 Reconfigurable RISC'; case ELF.ISA.CRAYNV2: return 'Cray NV2 vector architecture'; case ELF.ISA.RX: return 'Renesas RX'; case ELF.ISA.METAG: return 'Imagination Tech. META'; case ELF.ISA.MCST_ELBRUS: return 'MCST Elbrus'; case ELF.ISA.ECOG16: return 'Cyan Technology eCOG16'; case ELF.ISA.CR16: return 'National Semi. CompactRISC CR16'; case ELF.ISA.ETPU: return 'Freescale Extended Time Processing Unit'; case ELF.ISA.SLE9X: return 'Infineon Tech. SLE9X'; case ELF.ISA.L10M: return 'Intel L10M'; case ELF.ISA.K10M: return 'Intel K10M'; case ELF.ISA.AARCH64: return 'ARM AARCH64'; case ELF.ISA.AVR32: return 'Amtel 32-bit microprocessor'; case ELF.ISA.STM8: return 'STMicroelectronics STM8'; case ELF.ISA.TILE64: return 'Tileta TILE64'; case ELF.ISA.TILEPRO: return 'Tilera TILEPro'; case ELF.ISA.MICROBLAZE: return 'Xilinx MicroBlaze'; case ELF.ISA.CUDA: return 'NVIDIA CUDA'; case ELF.ISA.TILEGX: return 'Tilera TILE-Gx'; case ELF.ISA.CLOUDSHIELD: return 'CloudShield'; case ELF.ISA.COREA_1ST: return 'KIPO-KAIST Core-A 1st gen.'; case ELF.ISA.COREA_2ND: return 'KIPO-KAIST Core-A 2nd gen.'; case ELF.ISA.ARC_COMPACT2: return 'Synopsys ARCompact V2'; case ELF.ISA.OPEN8: return 'Open8 RISC'; case ELF.ISA.RL78: return 'Renesas RL78'; case ELF.ISA.VIDEOCORE5: return 'Broadcom VideoCore V'; case ELF.ISA.ISA78KOR: return 'Renesas 78KOR'; case ELF.ISA.ISA56800EX: return 'Freescale 56800EX DSC'; case ELF.ISA.BA1: return 'Beyond BA1'; case ELF.ISA.BA2: return 'Beyond BA2'; case ELF.ISA.XCORE: return 'XMOS xCORE'; case ELF.ISA.MCHP_PIC: return 'Microchip 8-bit PIC(r)'; case ELF.ISA.KM32: return 'KM211 KM32'; case ELF.ISA.KMX32: return 'KM211 KMX32'; case ELF.ISA.EMX16: return 'KM211 KMX16'; case ELF.ISA.EMX8: return 'KM211 KMX8'; case ELF.ISA.KVARC: return 'KM211 KVARC'; case ELF.ISA.CDP: return 'Paneve CDP'; case ELF.ISA.COGE: return 'Cognitive Smart Memory Processor'; case ELF.ISA.COOL: return 'Bluechip CoolEngine'; case ELF.ISA.NORC: return 'Nanoradio Optimized RISC'; case ELF.ISA.CSR_KALIMBA: return 'CSR Kalimba'; case ELF.ISA.Z80: return 'Zilog Z80'; case ELF.ISA.VISIUM: return 'Controls and Data Services VISIUMcore'; case ELF.ISA.FT32: return 'FTDI Chip FT32'; case ELF.ISA.MOXIE: return 'Moxie processor'; case ELF.ISA.AMDGPU: return 'AMD GPU'; case ELF.ISA.RISCV: return 'RISC-V'; case ELF.ISA.BPF: return 'Linux BPF'; case ELF.ISA.CSKY: return 'C-SKY'; } } export function abiToString(abi) { switch (abi) { case ELF.ABI.GNUHurd: return 'GNU Hurd'; case ELF.ABI.NovelloModesto: return 'Novello Modesto'; case ELF.ABI.HPUX: return 'HP-UX'; case ELF.ABI.NonStopKernel: return 'NonStop Kernel'; case ELF.ABI.FenixOS: return 'Fenix OS'; case ELF.ABI.ARMEABI: return 'ARM EABI'; default: return ELF.ABI[abi] || abi.toString(); } } export function elfTypeToString(elfType) { return ELF.Type[elfType] || elfType.toString(); } export function segmentTypeToString(segmentType) { switch (segmentType) { case ELF.SegmentType.ProgHeaderTable: return 'Program Header Table'; case ELF.SegmentType.GnuEhFrame: return 'GNU EH frame'; case ELF.SegmentType.GnuStack: return 'GNU stack info'; case ELF.SegmentType.GnuRelRo: return 'GNU ro relocation'; default: return ELF.SegmentType[segmentType] || segmentType.toString(); } } export function sectionTypeToString(sectionType) { switch (sectionType) { case ELF.SectionType.Null: return 'NULL'; case ELF.SectionType.ProgBits: return 'Prog bits'; case ELF.SectionType.SymTab: return 'Symbol table'; case ELF.SectionType.StrTab: return 'String table'; case ELF.SectionType.Rela: return 'Relocation with addends'; case ELF.SectionType.Hash: return 'Symbol hash table'; case ELF.SectionType.Dynamic: return 'Dynamic'; case ELF.SectionType.Note: return 'Note'; case ELF.SectionType.NoBits: return 'No bits'; case ELF.SectionType.Rel: return 'Relocation'; case ELF.SectionType.ShLib: return 'ShLib'; case ELF.SectionType.DynSym: return 'Dynamic linking symbols'; case ELF.SectionType.InitArray: return 'Init array'; case ELF.SectionType.FiniArray: return 'Fini array'; case ELF.SectionType.PreInitArray: return 'Pre-init array'; case ELF.SectionType.Group: return 'Section group'; case ELF.SectionType.ShNdx: return 'Extended symbol table index'; case ELF.SectionType.Num: return 'Num'; case ELF.SectionType.GnuAttributes: return 'GNU object attributes'; case ELF.SectionType.GnuHash: return 'GNU hash'; case ELF.SectionType.GnuLibList: return 'GNU pre-link library list'; case ELF.SectionType.GnuVerDef: return 'GNU version definition'; case ELF.SectionType.GnuVerNeed: return 'GNU version needs'; case ELF.SectionType.GnuVerSym: return 'GNU version symbol table'; case ELF.SectionType.RPLExports: return 'RPL exports'; case ELF.SectionType.RPLImports: return 'RPL imports'; case ELF.SectionType.RPLCrcs: return 'RPL CRCs'; case ELF.SectionType.RPLFileInfo: return 'RPL File Info'; default: return ELF.SectionType[sectionType] || Number(sectionType).toString(); } } export function sectionFlagsToString(flags) { flags = Number(flags); // no flags are more than 32 bits let str = []; if (flags & ELF.SectionFlags.Write) str.push('Write'); if (flags & ELF.SectionFlags.Alloc) str.push('Alloc'); if (flags & ELF.SectionFlags.Executable) str.push('Exec'); if (flags & ELF.SectionFlags.Merge) str.push('Merge'); if (flags & ELF.SectionFlags.Strings) str.push('Strings'); if (flags & ELF.SectionFlags.InfoLink) str.push('Info Link'); if (flags & ELF.SectionFlags.LinkOrder) str.push('Link Order'); if (flags & ELF.SectionFlags.Nonconforming) str.push('Nonconforming'); if (flags & ELF.SectionFlags.Group) str.push('Group'); if (flags & ELF.SectionFlags.TLS) str.push('Thread Local Storage'); if (flags & ELF.SectionFlags.Compressed) str.push('Compressed'); if (flags & ELF.SectionFlags.AMD64Large) str.push('AMD64 Large'); if (flags & ELF.SectionFlags.Ordered) str.push('Ordered'); if (flags & ELF.SectionFlags.Exclude) str.push('Exclude'); if (str.length === 0) return '<none>'; return str.join(' | '); } export function programHeaderFlagsToString(flags) { let str = []; if (flags & 0x4) str.push('Read'); if (flags & 0x2) str.push('Write'); if (flags & 0x1) str.push('Execute'); return str.join(' | '); } export function elfFlagsToString(isa, flags) { if (isa === ELF.ISA.ARM) { const ver = ((flags & 0xFF000000) >> 24); let str = [`Version: ${ver}`]; if (flags & 0x00800000) str.push('BE-8'); if (ver <= 4 && flags & 0x00400000) str.push('Legacy'); if (ver >= 5 && flags & 0x00000400) str.push('Hard Float'); if (ver >= 5 && flags & 0x00000200) str.push('Soft Float'); return str.join(' | '); } return flags.toString(); } export function symbolTypeToString(type) { switch (type) { case ELF.SymbolType.RelocationExpression: return 'Relocation Expression'; case ELF.SymbolType.SignedRelocationExpression: return 'Signed Relocation Expression'; case ELF.SymbolType.ThreadLocalStorage: return 'Thread Local Storage'; default: return ELF.SymbolType[type] || type.toString(); } } export function symbolBindingToString(binding) { return ELF.SymbolBinding[binding] || binding.toString(); } export function symbolVisibilityToString(visibility) { return ELF.SymbolVisibility[visibility] || visibility.toString(); }