⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbgdata.c

📁 简单的虚拟机
💻 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 + -