diff --git a/README.md b/README.md index 77e2b5e..3797cff 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ uint8_t* readelfsection(FILE *f, char *name, uint64_t *size, Fhdr *fp); void freeelf(Fhdr *fp); char* elfclass(uint8_t class); char* elfdata(uint8_t data); +char* elfosabi(uint8_t osabi); char* elftype(uint16_t type); char* elfmachine(uint16_t machine); char* elfversion(uint8_t version); diff --git a/elf.h b/elf.h index 20ae3c5..237f39d 100644 --- a/elf.h +++ b/elf.h @@ -52,6 +52,7 @@ uint8_t* readelfsection(FILE*, char*, uint64_t*, Fhdr*); void freeelf(Fhdr*); char* elfclass(uint8_t); char* elfdata(uint8_t); +char* elfosabi(uint8_t); char* elftype(uint16_t); char* elfmachine(uint16_t); char* elfversion(uint8_t); diff --git a/str.c b/str.c index b7cd050..e91fe54 100644 --- a/str.c +++ b/str.c @@ -32,6 +32,35 @@ elfdata(uint8_t data) return "Unknown data"; } +static char* osabistr[] = { + [ELFOSABI_NONE] = "No extensions or unspecified", + [ELFOSABI_HPUX] = "Hewlett-Packard HP-UX", + [ELFOSABI_NETBSD] = "NetBSD", + [ELFOSABI_GNU] = "GNU ", + [ELFOSABI_SOLARIS] = "Sun Solaris", + [ELFOSABI_AIX] = "AIX", + [ELFOSABI_IRIX] = "IRIX", + [ELFOSABI_FREEBSD] = "FreeBSD", + [ELFOSABI_TRU64] = "Compaq TRU64 UNIX", + [ELFOSABI_MODESTO] = "Novell Modesto", + [ELFOSABI_OPENBSD] = "Open BSD", + [ELFOSABI_OPENVMS] = "Open VMS", + [ELFOSABI_NSK] = "Hewlett-Packard Non-Stop Kernel", + [ELFOSABI_AROS] = "Amiga Research OS", + [ELFOSABI_FENIXOS] = "The FenixOS highly scalable multi-core OS", + [ELFOSABI_CLOUDABI] = "Nuxi CloudABI", + [ELFOSABI_OPENVOS] = "Stratus Technologies OpenVOS", +}; + +char* +elfosabi(uint8_t data) +{ + if(data < nelem(osabistr) && osabistr[data]) + return osabistr[data]; + + return "Unknown osabi"; +} + char *machinestr[] = { [EM_NONE] = "No machine", [EM_M32] = "AT&T WE 32100",