Minor cleanup of the printed data and added x86_64 to the machine types it reconizes.
This commit is contained in:
@@ -49,12 +49,13 @@ typedef enum ELFMachine
|
|||||||
EM_68k = 4,
|
EM_68k = 4,
|
||||||
EM_88k = 5,
|
EM_88k = 5,
|
||||||
EM_860 = 7,
|
EM_860 = 7,
|
||||||
EM_MIPS = 8
|
EM_MIPS = 8,
|
||||||
|
EM_X86_64 = 62
|
||||||
} ELFMachine;
|
} ELFMachine;
|
||||||
|
|
||||||
typedef enum ELFOSABI
|
typedef enum ELFOSABI
|
||||||
{
|
{
|
||||||
ELFOSABI_NONE = 0,
|
ELFOSABI_SYSTEMV = 0,
|
||||||
ELFOSABI_HPUX = 1,
|
ELFOSABI_HPUX = 1,
|
||||||
ELFOSABI_NETBSD = 2,
|
ELFOSABI_NETBSD = 2,
|
||||||
ELFOSABI_GNU = 3,
|
ELFOSABI_GNU = 3,
|
||||||
@@ -95,41 +96,51 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else printf("Magic ELF number found!\n");
|
|
||||||
|
printf("Magic: ");
|
||||||
|
|
||||||
|
for(int i = 0; i < EI_NIDENT; i++)
|
||||||
|
{
|
||||||
|
printf("%02X ", bytes[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
switch(bytes[EI_CLASS])
|
switch(bytes[EI_CLASS])
|
||||||
{
|
{
|
||||||
case ELFClass32:
|
case ELFClass32:
|
||||||
printf("32-bit object detected\n");
|
printf("Class: 32-bit object\n");
|
||||||
break;
|
break;
|
||||||
case ELFClass64:
|
case ELFClass64:
|
||||||
printf("64-bit object detected\n");
|
printf("Class: 64-bit object\n");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("Invalid class type detected\n");
|
printf("Class: Invalid\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(bytes[EI_DATA])
|
switch(bytes[EI_DATA])
|
||||||
{
|
{
|
||||||
case ELFDataLSB:
|
case ELFDataLSB:
|
||||||
printf("2's complement, little endian.\n");
|
printf("Data: 2's complement, little endian.\n");
|
||||||
break;
|
break;
|
||||||
case ELFDataMSB:
|
case ELFDataMSB:
|
||||||
printf("2's complement, big endian.\n");
|
printf("Data: 2's complement, big endian.\n");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("Unknown byte order\n");
|
printf("Data: Unknown byte order\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bytes[EI_VERSION] == 1) printf("Version: current\n");
|
if (bytes[EI_VERSION] == 1) printf("Version: 1 (Current)\n");
|
||||||
else printf("Invalid version number\n");
|
else printf("Version: 0 (Invalid)\n");
|
||||||
|
|
||||||
|
printf("OS/ABI: ");
|
||||||
|
|
||||||
switch(bytes[EI_OSABI])
|
switch(bytes[EI_OSABI])
|
||||||
{
|
{
|
||||||
case ELFOSABI_NONE:
|
case ELFOSABI_SYSTEMV:
|
||||||
printf("No extension or unspecified OS ABI.\n");
|
printf("System V ABI\n");
|
||||||
break;
|
break;
|
||||||
case ELFOSABI_HPUX:
|
case ELFOSABI_HPUX:
|
||||||
printf("Hewlett-Packard HP-UX ABI\n");
|
printf("Hewlett-Packard HP-UX ABI\n");
|
||||||
@@ -186,10 +197,12 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
printf("ABI Version: %d\n", bytes[EI_ABIVERSION]);
|
printf("ABI Version: %d\n", bytes[EI_ABIVERSION]);
|
||||||
|
|
||||||
|
printf("Type: ");
|
||||||
|
|
||||||
switch(bytes[EI_NIDENT] + bytes[EI_NIDENT + 1])
|
switch(bytes[EI_NIDENT] + bytes[EI_NIDENT + 1])
|
||||||
{
|
{
|
||||||
case ET_None:
|
case ET_None:
|
||||||
printf("No file type\n");
|
printf("None\n");
|
||||||
break;
|
break;
|
||||||
case ET_Rel:
|
case ET_Rel:
|
||||||
printf("Rel\n");
|
printf("Rel\n");
|
||||||
@@ -198,7 +211,7 @@ int main(int argc, char** argv)
|
|||||||
printf("Exec\n");
|
printf("Exec\n");
|
||||||
break;
|
break;
|
||||||
case ET_Dyn:
|
case ET_Dyn:
|
||||||
printf("File type is DYN (Position-Independent Executable file)\n");
|
printf("DYN (Position-Independent Executable file)\n");
|
||||||
break;
|
break;
|
||||||
case ET_Core:
|
case ET_Core:
|
||||||
printf("Core\n");
|
printf("Core\n");
|
||||||
@@ -214,10 +227,15 @@ int main(int argc, char** argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("Machine: ");
|
||||||
|
|
||||||
switch (bytes[EI_NIDENT + 2] + bytes[EI_NIDENT + 3]) {
|
switch (bytes[EI_NIDENT + 2] + bytes[EI_NIDENT + 3]) {
|
||||||
case EM_860:
|
case EM_860:
|
||||||
printf("Intel 80860\n");
|
printf("Intel 80860\n");
|
||||||
break;
|
break;
|
||||||
|
case EM_X86_64:
|
||||||
|
printf("AMD x86-64 architecture\n");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Failed to identify machine type\n");
|
fprintf(stderr, "Failed to identify machine type\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user