FreeCalypso > hg > freecalypso-reveng
diff leo-obj/tool/basics.c @ 130:87b82398a08b
leo-obj project subtree started, tiobjd tool moved into it
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 06 Apr 2014 22:14:39 +0000 |
parents | ticoff/basics.c@590396e27e96 |
children | ed533d469838 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/leo-obj/tool/basics.c Sun Apr 06 22:14:39 2014 +0000 @@ -0,0 +1,74 @@ +/* + * This C module implements some "basic" dump commands + */ + +#include <sys/types.h> +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include "filestruct.h" +#include "intstruct.h" +#include "globals.h" + +extern unsigned get_u16(), get_u32(); + +dump_filehdr_info() +{ + time_t timestamp; + struct tm *timedec; + + timestamp = get_u32(filehdr_struct->f_timdat); + timedec = gmtime(×tamp); + printf("timestamp: %d-%02d-%02dT%02d:%02d:%02dZ\n", + timedec->tm_year + 1900, timedec->tm_mon + 1, timedec->tm_mday, + timedec->tm_hour, timedec->tm_min, timedec->tm_sec); + printf("file flags: 0x%x\n", get_u16(filehdr_struct->f_flags)); + printf("%u sections, %u symtab entries\n", nsections, nsymtab); + return(0); +} + +dump_sechdr() +{ + unsigned n; + struct internal_scnhdr *inf; + + for (n = 0; n < nsections; n++) { + inf = sections + n; + printf("#%d: %s size=%u, flags=0x%x\n", n, inf->name, + inf->size, inf->flags); + printf("\t%u reloc, %u line entries\n", + inf->nreloc, inf->nlineent); + } + return(0); +} + +cmd_sechdr() +{ + get_int_section_table(); + dump_sechdr(); + exit(0); +} + +cmd_symtab() +{ + get_int_section_table(); + get_int_symbol_table(); + dump_symtab(); + exit(0); +} + +cmd_basics() +{ + printf("%s:\n", objfilename); + dump_filehdr_info(); + putchar('\n'); + get_int_section_table(); + printf("Sections:\n\n"); + dump_sechdr(); + putchar('\n'); + get_int_symbol_table(); + printf("Symbol table:\n\n"); + dump_symtab(); + putchar('\n'); + exit(0); +}