📄 dbgdata.c
字号:
#include <stdio.h>#include <stdlib.h>#include "dbgdata.h"void printHeaderRec(struct HeaderRec* hptr){ if(hptr->magic != SIGNATURE) { printf("DOS magic number doesn't match!\n"); exit(1); } printf("DOS Header Magic Number:\t\t%04X \"%c%c\"\n", hptr->magic, hptr->magic & 0x00FF, (hptr->magic & 0xFF00) >> 8); /* print Bytes on last page of file */ printf("Bytes on last page of file: \t%04X\n", hptr->lpbytes); /* print Pages in file */ printf("Pages in file: \t%04X\n", hptr->pages); /* print Relocations */ printf("Relocations: \t%04X\n", hptr->relocs); /* print Size of header in paragraphs */ printf("Size of header in paragraphs: \t%04X\n", hptr->hdsize); /* print Minimum extra paragraphs needed */ printf("Minimun extra paragraphs needed: \t%04X\n", hptr->minparas); /* print Maxmum extra paragraphs needed */ printf("Maximum extra paragraphs needed: \t%04X\n", hptr->maxparas); /* print Initial (relative) SS value */ printf("Initial (relative) SS: \t%04X\n", hptr->ss); /* print Initial SP value */ printf("Initial SP: \t%04X\n", hptr->sp); /* print Checksum */ printf("Checksum: \t%04X\n", hptr->chksum); /* print Initial IP value */ printf("Initial IP value: \t%04X\n", hptr->ip); /* print Initial (relative) CS value */ printf("Initial (relative) CS value: \t%04X\n", hptr->cs); /* print File Address of relocation table */ printf("File Address of relocation table: \t%04X\n", hptr->roffset); /* print Overlay number */ printf("Overlay number:\t%04X\n", hptr->overlay);}bool readDebugData(struct HeaderRec* hptr,struct RelocRec* rptr,FILE* fptr){ int i; fseek(fptr, 0, SEEK_SET); fread(hptr, sizeof(struct HeaderRec), 1, fptr); if(feof(fptr)||ferror(fptr)) { printf("readDebugData(): error reading header record!\n"); return false; } printf("==================================================\n"); printf("header record:\n"); printHeaderRec(hptr); printf("==================================================\n"); printf("relocation table:\n"); if(hptr->relocs<=0) { printf("readDebugData(): no relocation item\n"); rptr=NULL; } else { if(!(rptr=(struct RelocRec*)malloc(hptr->relocs*sizeof(struct RelocRec)))) { printf("readDebugData(): memory allocation error!\n"); return false; } fseek(fptr, hptr->roffset,SEEK_SET); fread(rptr,sizeof(struct RelocRec),hptr->relocs,fptr); if(feof(fptr)||ferror(fptr)) { printf("readDebugData(): error reading relocation record!\n"); free(rptr); return false; } for(i=0;i<hptr->relocs;i++) { printf("rrec[%d].offset=%X\n",i,rptr[i].offset); printf("rrec[%d].segmet=%x\n",i,rptr[i].segment); } } printf("==================================================\n"); return true;}/*void print_reloc(reloc* rlc, int relocations);*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -