/* quickie program to dump x.out files */ #include "stdio.h" #include "x.out.h" struct x_hdr x_hdr; struct x_sg x_sg[10]; struct x_rel x_rel; struct x_sym x_sym; short sbuf[2048]; char *segtypes[] { "unknown", "bss", "stack", "code", "constant pool", "initialized data", "mixed code/data, not protectable", "mixed code/data, protectable" }; int floc, bigs, dflag = {1}, /* dump init data */ rflag = {1}, /* dump relocation data */ sflag = {1}; /* dump symbol table data */ main( argc, argv ) char **argv; { register i, j, k, l; unsigned len, offset; i = 1; if( i < argc && argv[i][0] == '-' ) doargs( argv[i++] ); if( i < argc ){ close( 0 ); if( openb( argv[i] , 0 ) != 0 ){ printf(stderr,"cannot open '%s'\n",argv[i] ); exit(0); } } read( 0 , &x_hdr , sizeof( x_hdr ) ); if( !bigs )fprintf( stdout, "magic = %x nseg = %d init = %ld reloc = %ld symb = %ld\n", x_hdr.x_magic, x_hdr.x_nseg, x_hdr.x_init, x_hdr.x_reloc, x_hdr.x_symb ); floc = sizeof( x_hdr ); for( i=0; i0) { l = (len>4096)?4096:len; j = read( 0, sbuf, l ); if( j != l ){ fprintf(stdout, "unexpected eof: length is %u\n", offset + j); j = 0; } for( k = 0; k>1 ] ); } floc += 2; } len -= l; } } if( dflag ) fprintf(stdout,"\n\n" ); } if(x_hdr.x_reloc && rflag && !bigs) fprintf(stdout,"floc sgn flg loc bas\n"); for( i=0; i= 0; i -= 4 ) putchar( hextab[ (n>>i) & 017 ] ); } eof(){ fprintf(stdout,"\n\n*****unexpected eof*****\n"); exit(0); }