elf32
This commit is contained in:
41
main.c
41
main.c
@@ -127,23 +127,22 @@ int read_elf_magic(FILE* fp)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_elf_common(unsigned char e_ident[EI_NIDENT])
|
void display_elf_common(unsigned char e_ident[EI_NIDENT])
|
||||||
{
|
{
|
||||||
// EI_DATA
|
// EI_DATA
|
||||||
switch(e_ident[5])
|
switch(e_ident[5])
|
||||||
{
|
{
|
||||||
case 0x01:
|
case 0x01:
|
||||||
printf("(LSB) ");
|
printf("(little-endian) ");
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
printf("(MSB) ");
|
printf("(big-endian) ");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("\nInvalid data encoding!\n");
|
printf("\nInvalid data encoding!\n");
|
||||||
exit(-EINVAL);
|
exit(-EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
{
|
{
|
||||||
// EI_VERSION
|
// EI_VERSION
|
||||||
@@ -178,35 +177,36 @@ void display_elf32(struct Elf32_Ehdr* header)
|
|||||||
printf("(unknown),");
|
printf("(unknown),");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
switch (header->e_machine)
|
switch (header->e_machine)
|
||||||
{
|
{
|
||||||
case 0x00:
|
case 0x00:
|
||||||
printf("No architecture");
|
printf("No architecture,");
|
||||||
break;
|
break;
|
||||||
case 0x01:
|
case 0x01:
|
||||||
printf("AT&T WE 32100");
|
printf("AT&T WE 32100,");
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
printf("SPARC");
|
printf("SPARC,");
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
printf("i386");
|
printf("i386,");
|
||||||
break;
|
break;
|
||||||
case 0x04:
|
case 0x04:
|
||||||
printf("Motorola 68000");
|
printf("Motorola 68000,");
|
||||||
break;
|
break;
|
||||||
case 0x05:
|
case 0x05:
|
||||||
printf("Motorola 88000");
|
printf("Motorola 88000,");
|
||||||
break;
|
break;
|
||||||
case 0x07:
|
case 0x07:
|
||||||
printf("Intel 80860");
|
printf("Intel 80860,");
|
||||||
break;
|
break;
|
||||||
case 0x08:
|
case 0x08:
|
||||||
printf("MIPS RS3000");
|
printf("MIPS RS3000,");
|
||||||
break;
|
break;
|
||||||
case 0x09:
|
case 0x09:
|
||||||
printf("MIPS RS4000");
|
printf("MIPS RS4000,");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("Unknown architecture");
|
printf("Unknown architecture");
|
||||||
@@ -272,8 +272,8 @@ unsigned char read_elf_obj_size(FILE* fp)
|
|||||||
|
|
||||||
void display_sec_common()
|
void display_sec_common()
|
||||||
{
|
{
|
||||||
printf("\nNX %s\n", nx ? "enabled" : "disabled");
|
printf(" %s, ", nx ? "\x1b[32mNX enabled\x1b[0m" : "\x1b[31mNX disabled\x1b[0m");
|
||||||
printf("PIE %s\n", pie ? "enabled" : "disabled");
|
printf("%s, ", pie ? "\x1b[32mPIE enabled\x1b[0m" : "\x1b[31mPIE disabled\x1b[0m");
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
@@ -281,10 +281,15 @@ int main(int argc, char* argv[])
|
|||||||
// Argument processing
|
// Argument processing
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
{
|
{
|
||||||
printf("Usage: %s <elf>\n", argv[0]);
|
printf("Usage: %s <file> [options]\n -v --verbose displays more information\n", argv[0]);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i=1; i<argc; i++)
|
||||||
|
{
|
||||||
|
if (strncmp(argv[i], "-v", 2) == 0) verbose = true;
|
||||||
|
}
|
||||||
|
|
||||||
char* filename = argv[1];
|
char* filename = argv[1];
|
||||||
if (!filename)
|
if (!filename)
|
||||||
{
|
{
|
||||||
@@ -306,6 +311,8 @@ int main(int argc, char* argv[])
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("%s: ", filename);
|
||||||
|
|
||||||
// ELF32 or ELF64?
|
// ELF32 or ELF64?
|
||||||
unsigned char elf_obj_size = read_elf_obj_size(elf_file);
|
unsigned char elf_obj_size = read_elf_obj_size(elf_file);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user