/* * Read and display information from the header record for a DOS "EXE" file. * * Compile with: cc showexe -fop */ #include struct EXEheader { char sig1; char sig2; unsigned largest_block; unsigned number_of_blocks; unsigned num_reloc_table; unsigned size_of_header; unsigned min_add_ram; unsigned max_add_ram; unsigned ss_offset; unsigned initial_sp; unsigned checksum; unsigned initial_ip; unsigned cs_offset; unsigned first_rel_item; } ; main(int argc, char *argv[]) { struct EXEheader header; FILE *fp; if(argc < 2) abort("Use: showexe \n"); fp = fopen(argv[1], "rvqb"); fget(header, sizeof(header), fp); fclose(fp); printf("Signature: '%c%c'\n", header.sig1, header.sig2); printf("Last block size: %u\n", header.largest_block); printf("Number of blocks: %u\n", header.number_of_blocks); printf("Number of items in relocation table: %u\n", header.num_reloc_table); printf("Size of header (in paragraphs): %u\n", header.size_of_header); printf("MIN additional RAM required: %u\n", header.min_add_ram); printf("MAX additional RAM required: %u\n", header.max_add_ram); printf("Offset to SS (in paragraphs): %u\n", header.ss_offset); printf("Initial stack pointer: $%04x\n", header.initial_sp); printf("Checksum: %04x\n", header.checksum); printf("Initial Instruction Pointer: $%04x\n", header.initial_ip); printf("Offset to CS (in paragraphs): %u\n", header.cs_offset); printf("Offset of first relocatable item: $%04x\n", header.first_rel_item); }