This commit is contained in:
2025-09-05 15:22:12 +02:00
parent 495b5a4d76
commit bd007c9a69
3 changed files with 35 additions and 28 deletions

BIN
a.out

Binary file not shown.

BIN
helpelf

Binary file not shown.

37
main.c
View File

@@ -133,17 +133,16 @@ int read_elf_magic(FILE* fp)
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);