home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
zip
/
gnu
/
utlsrc33.lzh
/
UTLSRC33
/
MOUT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-30
|
2KB
|
132 lines
/*
* Dump minix a.out
* ++jrb
*/
#include <stdio.h>
#include "minix-out.h"
main(argc, argv)
int argc;
char **argv;
{
void dmp();
if(argc < 2)
dmp("a.out");
else
{
while(--argc)
dmp(*++argv);
}
}
#include <ctype.h>
#ifdef __GNU__
inline
#endif
void putsym(class, id)
int class, id;
{
register int i = class & 0370;
if(i == 0020)
putchar(toupper(id));
else
putchar(id);
if(i == 0030)
printf(" static");
putchar('\n');
}
void dmp(name)
char *name;
{
register FILE *fp;
extern FILE *fopen();
extern void *malloc();
struct aexec head;
struct asym *sym, *p;
register int i,j;
if((fp = fopen(name, "r")) == (FILE *)NULL)
{
perror(name);
exit(1);
}
printf("%s:\n", name);
if(fread(&head, sizeof(head), 1, fp) != 1)
{
perror(name);
exit(2);
}
if(head.a_magic != CMAGIC)
{
fprintf(stderr,"%s: bad magic (%lx)\n", name, head.a_magic);
exit(3);
}
printf("\tText %ld\tData %ld\tBss %ld\tSyms %d\n\n", head.a_text,
head.a_data, head.a_bss, (int)(head.a_syms/sizeof(struct asym)));
if(fseek(fp,(long)(head.a_text + head.a_data), 1))
{
perror(name);
exit(4);
}
if((sym = (struct asym *)malloc((unsigned int)head.a_syms)) == NULL)
{
perror("malloc");
exit(5);
}
if(fread(sym, (int)(head.a_syms), 1, fp) != 1)
{
perror(name);
exit(6);
}
fclose(fp);
for(p = sym, i = 0; i < head.a_syms/sizeof(struct asym); i++, p++)
{
printf("\t%d:\t", i);
for(j = 0; j < 8; j++)
putchar(p->a_name[j]);
putchar('\t');
printf("%ld\t", p->a_value);
switch(p->a_sclass & 07)
{
case 0:
putsym(p->a_sclass,'u');
break;
case 1:
putsym(p->a_sclass,'a');
break;
case 2:
putsym(p->a_sclass,'t');
break;
case 3:
putsym(p->a_sclass,'d');
break;
case 4:
putsym(p->a_sclass,'b');
break;
case 5:
putsym(p->a_sclass,'c');
break;
default:
printf("unknown class %o\n", p->a_sclass);
}
}
}