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 >
C/C++ Source or Header  |  1993-07-30  |  2KB  |  132 lines

  1. /*
  2.  * Dump minix a.out
  3.  *    ++jrb
  4.  */
  5. #include <stdio.h>
  6. #include "minix-out.h"
  7.  
  8. main(argc, argv)
  9. int argc;
  10. char **argv;
  11. {
  12.     void dmp();
  13.     
  14.     if(argc < 2)
  15.     dmp("a.out");
  16.     else
  17.     {
  18.     while(--argc)
  19.         dmp(*++argv);
  20.     }
  21. }
  22.  
  23. #include <ctype.h>
  24. #ifdef __GNU__
  25. inline
  26. #endif
  27. void putsym(class, id)
  28. int class, id;
  29. {
  30.     register int i = class & 0370;
  31.  
  32.     if(i ==  0020)
  33.     putchar(toupper(id));
  34.     else
  35.     putchar(id);
  36.     if(i == 0030)
  37.     printf(" static");
  38.     putchar('\n');
  39. }
  40.  
  41. void dmp(name)
  42. char *name;
  43. {
  44.     register FILE *fp;
  45.     extern FILE *fopen();
  46.     extern void *malloc();
  47.     
  48.     struct aexec head;
  49.     struct asym *sym, *p;
  50.     register int i,j;
  51.     
  52.     if((fp = fopen(name, "r")) == (FILE *)NULL)
  53.     {
  54.     perror(name);
  55.     exit(1);
  56.     }
  57.     printf("%s:\n", name);
  58.     if(fread(&head, sizeof(head), 1, fp) != 1)
  59.     {
  60.     perror(name);
  61.     exit(2);
  62.     }
  63.     if(head.a_magic != CMAGIC)
  64.     {
  65.     fprintf(stderr,"%s: bad magic (%lx)\n", name, head.a_magic);
  66.     exit(3);
  67.     }
  68.     printf("\tText %ld\tData %ld\tBss %ld\tSyms %d\n\n", head.a_text,
  69.        head.a_data, head.a_bss, (int)(head.a_syms/sizeof(struct asym)));
  70.     if(fseek(fp,(long)(head.a_text + head.a_data), 1))
  71.     {
  72.     perror(name);
  73.     exit(4);
  74.     }
  75.     
  76.     if((sym = (struct asym *)malloc((unsigned int)head.a_syms)) == NULL)
  77.     {
  78.     perror("malloc");
  79.     exit(5);
  80.     }
  81.     
  82.     if(fread(sym, (int)(head.a_syms), 1, fp) != 1)
  83.     {
  84.     perror(name);
  85.     exit(6);
  86.     }
  87.     fclose(fp);
  88.     
  89.     for(p = sym, i = 0; i < head.a_syms/sizeof(struct asym); i++, p++)
  90.     {
  91.     printf("\t%d:\t", i);
  92.     for(j = 0; j < 8; j++)
  93.         putchar(p->a_name[j]);
  94.     putchar('\t');
  95.     printf("%ld\t", p->a_value);
  96.     switch(p->a_sclass & 07)
  97.     {
  98.       case 0:
  99.         putsym(p->a_sclass,'u');
  100.         break;
  101.         
  102.       case 1:
  103.         putsym(p->a_sclass,'a');
  104.         break;
  105.         
  106.       case 2:
  107.         putsym(p->a_sclass,'t');
  108.         break;
  109.         
  110.       case 3:
  111.         putsym(p->a_sclass,'d');
  112.         break;
  113.         
  114.       case 4:
  115.         putsym(p->a_sclass,'b');
  116.         break;
  117.         
  118.       case 5:
  119.         putsym(p->a_sclass,'c');
  120.         break;
  121.  
  122.       default:
  123.         printf("unknown class %o\n", p->a_sclass);
  124.     }
  125.     }
  126. }
  127.  
  128.         
  129.  
  130.     
  131.     
  132.