亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dbgcmd.c

?? 《虛擬機的設計與實現c/cpp》(win32平臺)源碼 好東西大家熟知不多說
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                   +
+ dbgcmd.c - implements command-line debugging                      +
+                                                                   +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ macros                                                            +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

#define MAX_DBG_CHARS	256
#define BAD_RANGE		-1
#define VALID_RANGE		1
#define DEBUG_ON		1
#define DEBUG_OFF		0
#define BAD_CMD();		printf("%s is invalid, type \'?\' for help\n",debugLine);	

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ globals                                                           +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

char debugLine[MAX_DBG_CHARS];

struct DbgRange
{
	U8 start;
	U8 stop;
	int ok;
};

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ public prototype                                                  +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

void readDbgCmd();
void printDbgInstr(U8 addr);

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ private prototypes                                                +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

void printHelp();
void toggleDebugging(int state);
void printAppData();
struct DbgRange parseRangeStr();
void dumpRamRng(U8 strt, U8 stp);

void searchForStr();
U1 cmpRAMStr(U1 *ptr1, U1 *ptr2, U4 len);

void getIdentifierMetaData();
U1 searchForGlobal(char *str);
U1 matchProcName(char *str, U4 ind);
U1 searchCurrentProc(char *str, U4 ind);

S8 showCurrentProc(U1 display); 

void printRawBytes(U1 *ptr, U1 len);

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ public prototypes                                                 +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

void readDbgCmd()
{
	int size;

	printf("\n");

	while(1)
	{
		printf("debug>");
		scanf("%s",debugLine);

		size = strlen(debugLine);
		if(size>=MAX_DBG_CHARS)
		{ 
			ERROR0_LVL2("error: input command out of bounds"); 
		}

		switch(debugLine[0])
		{
			case '?':
			{
				if(debugLine[1]=='\0'){ printHelp(); }
				else{ BAD_CMD(); }

			}break;
			case 'f':
			case 'F':
			{
				if(debugLine[1]=='\0'){ printAppData(); }
				else{ BAD_CMD(); }

			}break;
			case 'q':
			case 'Q':
			{
				if(debugLine[1]=='\0')
				{ 
					toggleDebugging(DEBUG_OFF); 
					return; 
				}
				else{ BAD_CMD(); }

			}break;
			case 'd':
			case 'D':
			{
				if(debugLine[1]=='\0')
				{ 
					struct DbgRange rng;
					rng.ok=VALID_RANGE;
					rng = parseRangeStr();
					if(rng.ok!=BAD_RANGE)
					{
						dumpRamRng(rng.start,rng.stop);
					}
				}
				else{ BAD_CMD(); }

			}break;
			case 'S':
			case 's':
			{
				if(debugLine[1]=='\0'){ searchForStr();	}
				else{ BAD_CMD(); }

			}break;
			case 'L':
			case 'l':
			{
				if(debugLine[1]=='\0'){ getIdentifierMetaData(); }
				else{ BAD_CMD(); }

			}break;
			case 'P':
			case 'p':
			{
				if(debugLine[1]=='\0'){ showCurrentProc(TRUE); }
				else{ BAD_CMD(); }

			}break;
			case 'R':
			case 'r':
			{
				if((debugLine[1]=='i')&&(debugLine[2]=='\0'))
				{ 
					printBasicRegisters();
					printGeneralRegisters();
				}
				else if((debugLine[1]=='f')&&(debugLine[2]=='\0'))
				{ 
					printFloatRegisters(); 
				}
				else if((debugLine[1]=='d')&&(debugLine[2]=='\0'))
				{ 
					printDoubleRegisters(); 
				}
				else{ BAD_CMD(); }

			}break;
			case 'T':
			case 't':
			{
				if(debugLine[1]=='\0'){ return; }
				else{ BAD_CMD(); }

			}break;
			default:{ BAD_CMD(); }

		}/*end switch*/

		if(fflush(stdin)){ ERROR0_LVL2("error: could not flush STDIN"); }

	}/*end while*/
	
	return;

}/*end readDbgCmd*/

/*-----------------------------------------------------------------*/

void printHelp()
{
	printf("\nHEng debug mode help\n");
	printf("----------------------\n");
	printf("?\ndisplay this help screen\n\n");
	printf("d start stop\ndump bytes of memory in the range [start, stop]\n\n");
	printf("f\ndisplay executable file information\n\n");
	printf("l string\nquery meta-data for a program identifier\n\n");
	printf("p\nquery current procedure\n\n");
	printf("q\nexit debug mode and return to production mode\n\n");
	printf("ri\ndisplay integer registers\n\n");
	printf("rf\ndisplay float registers\n\n");
	printf("rd\ndisplay double registers\n\n");
	printf("s start stop string\nsearch memory range [start, stop] for string\n\n");
	printf("t\ntrace through next instruction\n\n");
	return;

}/*end printHelp*/

/*-----------------------------------------------------------------*/

void toggleDebugging(int state)
{
	if(state==DEBUG_ON){ debug = TRUE; }
	else if(state==DEBUG_OFF){ debug = FALSE; }
	else
	{ 
		ERROR0_LVL2("invalid state change request");
		debug = TRUE;
	}
	return;

}/*end toggleDebugging*/

/*-----------------------------------------------------------------*/

/*using global data from cmdline.c*/

void printAppData()
{
	printf("\nEXECUTABLE FILE----------------------\n");
	printf("file name->%s\n",appMetaData.fileName);
	printf("file size->"); pU8(appMetaData.fileSize);
	printf("\nfile symbol table size->"); pU8(appMetaData.szSymTbl);
	printf("\nfile string table size->"); pU8(appMetaData.szStrTbl);
	printf("\nfile bytecode size->"); pU8(appMetaData.szByteCode);
	printf("\nbytecode offset begin in file->"); pU8(appMetaData.bCodeFileStart);
	printf("\nbytecode offset end in file->"); pU8(appMetaData.bCodeFileEnd);
	printf("\n\nMEMORY LAYOUT------------------------\n");
	printf("heap allocated->"); pU8(appMetaData.heapSize);
	printf("\nstack allocated->"); pU8(appMetaData.stackSize);
	printf("\ntotal ram->"); pU8(appMetaData.ram);
	printf("\n\n");
	return;

}/*end printFileData*/

/*-----------------------------------------------------------------*/

struct DbgRange parseRangeStr()
{
	struct DbgRange rng;
	int ret;

	ret = rU8(&rng.start);
	if((ret==EOF)||(ret==0))
	{
		printf("bad start range\n");
		rng.ok=BAD_RANGE;
		return(rng);
	}

	ret = rU8(&rng.stop);
	if((ret==EOF)||(ret==0))
	{
		printf("bad end range\n");
		rng.ok=BAD_RANGE;
		return(rng);
	}

	if((rng.start<0)||(rng.stop<0))
	{
		printf("negative range values not allowed\n");
		rng.ok=BAD_RANGE;
		return(rng);
	}
	else if(rng.start > rng.stop)
	{
		printf(" ( start > stop ) not allowed\n");
		rng.ok=BAD_RANGE;
		return(rng);
	}

	if(rng.start > R[$TOP])
	{
		printf("range start value is greater than $TOP\n");
		rng.ok=BAD_RANGE;
		return(rng);
	}

	if(rng.stop > R[$TOP])
	{
		printf("range stop value is greater than $TOP\n");
		rng.ok=BAD_RANGE;
		return(rng);
	}

	return(rng);

}/*end parseRangeStr*/

/*-----------------------------------------------------------------*/

void dumpRamRng(U8 strt, U8 stp)
{
	U8 i;
	U8 j;
	j=0;
	printf("\n");
	for(i=strt;i<=stp;i++)
	{ 
		PRINT_MEM(i); printf("\t");
		if( (RAM[i]>32)&&(RAM[i]<127) )
		{
			printf("ASCII=%c ",RAM[i]);
		}
		else
		{
			switch(RAM[i])
			{
				case ' ':{ printf("ASCII=<SP>"); }break;
				case '\n':{ printf("ASCII=<TAB>");}break;
				case '\r':{ printf("ASCII=<CR>");}break;
				case '\t':{ printf("ASCII=<NL>");}break;
				default:{ printf("ASCII= control char(%lu)",RAM[i]); }
			}
		}
		printf("\n");
		j++;
	}
	printf("\n");
	return;

}/*end dumpRamRng*/

/*-----------------------------------------------------------------*/

void searchForStr()
{
	int ret;
	struct DbgRange rng;
	U8 i;
	U4 size;
	U1 found;

	found = FALSE;

	rng.ok = VALID_RANGE;
	rng = parseRangeStr();
	if(rng.ok==BAD_RANGE){ return; }

	ret = scanf("%s",debugLine);
	if((ret==EOF)||(ret==0))
	{
		printf("bad search string entered\n");
		return;
	}

	/* search rng.start->rng.stop for debugLine */
		
	size = strlen(debugLine);
	if(size==0)
	{
		printf("bad search string entered\n");
		return;
	}

	for(i=rng.start;i<=rng.stop;i++)
	{
		if(RAM[i]==debugLine[0])
		{
			ret = cmpRAMStr(debugLine,&RAM[i],size);
			if(ret==TRUE)
			{
				printf("Match-> address="); 
				pU8(i);
				printf("\n");
				found = TRUE;
			}
		}
	}

	if(found==FALSE)
	{ 
		printf("no such string in memory range ");
		pU8(rng.start);
		printf("->");
		pU8(rng.stop);
		printf("\n");
	}
	return;

}/*end searchForStr*/

/*-----------------------------------------------------------------*/

U1 cmpRAMStr(U1 *ptr1, U1 *ptr2, U4 len)
{
	U4 i;
	for(i=0;i<len;i++)
	{
		if(ptr1[i]!=ptr2[i]){ return(FALSE);}
	}
	return(TRUE);

}/*end cmpRAMStr*/

/*-----------------------------------------------------------------*/

void getIdentifierMetaData()
{
	int ret;
	S8 proc_ind;

	ret = scanf("%s",debugLine);
	if((ret==EOF)||(ret==0))
	{
		printf("bad identifier entered\n");
		return;
	}

	/* look through globals */

	ret = searchForGlobal(debugLine);
	if(ret==TRUE){ return; }

	/* if not in globals get current proc */

	proc_ind = showCurrentProc(FALSE);
	if(proc_ind==-1)
	{
		printf("symbol not global, currently outside all procedures\n");
		return;
	}
	
	ret = matchProcName(debugLine,(U4)proc_ind);
	if(ret==TRUE){ return; }

	/* if not proc name, look for ret, args, locals, and labels */
	
	ret = searchCurrentProc(debugLine,(U4)proc_ind);
	if(ret==TRUE){ return; }

	printf("could not resolve symbol\n");

	return;

}/*end getIdentifierMetaData*/

/*-----------------------------------------------------------------*/

U1 searchForGlobal(char *str)
{
	U4 i;
	U8 j;
	U8 addr;
	char *temp;

	for(i=0;i<debugData.contents.nGlobVarRec;i++)
	{
		temp = &(debugData.strTbl[debugData.gvRec[i].text]);
		if(strcmp(str,temp)==0)
		{
			printf("global variable->%s\n",str);
			printf("type->%s\n",globSz[debugData.gvRec[i].dType]);
			printf("length->"); pU8(debugData.gvRec[i].len); printf("\n");
			printf("total size->"); pU8(debugData.gvRec[i].size); printf("\n");
			printf("line->"); pU4(debugData.gvRec[i].line); printf("\n");
			printf("values:\n");
			addr = R[$TOP] - debugData.gvRec[i].offset;
			for(j=0;j<debugData.gvRec[i].size;j++)
			{
				printf("\t"); pU8(j+1); printf(") address-> ");
				pU8(addr+j);
				printf(" value->%u\n",RAM[addr+j]);
			}
			return(TRUE);
		}
	}
	return(FALSE);

}/*end searchForGlobal*/

/*-----------------------------------------------------------------*/

U1 matchProcName(char *str, U4 ind)
{
	char *procname;
	procname = &debugData.strTbl[debugData.pRec[ind].text];
	if(strcmp(str,procname)==0)
	{
		printf("function->%s\n",str);
		printf("address->"); pU8(debugData.pRec[ind].address); printf("\n");
		printf("line="); pU4(debugData.pRec[ind].line); printf("\n");
		return(TRUE);
	}
	return(FALSE);

}/*end searchForProc*/

/*-----------------------------------------------------------------*/

U1 searchCurrentProc(char *str, U4 ind)
{
	U4 i;
	char *temp;
	U8 addr;
	U1 narg;
	U1 nloc;
	U2 nlbl;
	narg = debugData.pRec[ind].nArg;
	nloc = debugData.pRec[ind].nLocal;
	nlbl = debugData.pRec[ind].nLabel;
	
	if(debugData.pRec[ind].nRet==1)
	{
		temp = &(debugData.strTbl[debugData.pRec[ind].ret.text]);
		if(strcmp(str,temp)==0)
		{
			printf("return value->%s\n",str);
			printf("address->");
			addr = R[$FP]+debugData.pRec[ind].ret.fpOffset;
			pU8(addr);
			printf("\n");
			return(TRUE);
		}
	}
	for(i=0;i<narg;i++)
	{
		temp = &(debugData.strTbl[debugData.pRec[ind].arg[i].text]);
		if(strcmp(str,temp)==0)
		{
			printf("procedure argument->%s\n",str);
			printf("address->");
			addr = R[$FP]+debugData.pRec[ind].arg[i].fpOffset;
			pU8(addr);
			printf("\n");
			return(TRUE);
		}
	}
	for(i=0;i<nloc;i++)
	{
		temp = &(debugData.strTbl[debugData.pRec[ind].local[i].text]);
		if(strcmp(str,temp)==0)
		{
			printf("local storage->%s\n",str);
			printf("address->");
			addr = R[$FP]+debugData.pRec[ind].local[i].fpOffset;
			pU8(addr);
			printf("\n");
			return(TRUE);
		}
	}
	for(i=0;i<nlbl;i++)
	{
		temp = &(debugData.strTbl[debugData.pRec[ind].label[i].text]);
		if(strcmp(str,temp)==0)
		{
			printf("label->%s\n",str);
			printf("address->");
			pU8(debugData.pRec[ind].label[i].address);
			printf("\n");
			return(TRUE);
		}
	}
	return(FALSE);

}/*end searchCurrentProc*/

/*-----------------------------------------------------------------*/

S8 showCurrentProc(U1 display)
{
	U4 i;
	U4 nprocs;
	nprocs = debugData.contents.nProcRec;
	for(i=0;i<nprocs;i++)
	{
		if(((U8)R[$IP]) > debugData.pRec[nprocs-1].address )
		{
			if(display==TRUE)
			{
				printf("current proc->%s\n",&(debugData.strTbl[debugData.pRec[nprocs-1].text]));
				printf("address->"); pU8(debugData.pRec[nprocs-1].address);
				printf("\n");
				printf("line->"); pU4(debugData.pRec[nprocs-1].line);
				printf("\n");
			}
			return(nprocs-1);
		}
		else if((debugData.pRec[i].address <= ((U8)R[$IP]))&&
			    (debugData.pRec[i+1].address > ((U8)R[$IP])))
		{
			if(display==TRUE)
			{
				printf("current proc->%s\n",&(debugData.strTbl[debugData.pRec[i].text]));
				printf("address->"); pU8(debugData.pRec[i].address);
				printf("\n");
				printf("line->"); pU4(debugData.pRec[i].line);
				printf("\n");
			}
			return(i);
		}
	}
	printf("could not find current function\n");
	return(-1);

}/*end showCurrentProc*/

/*-----------------------------------------------------------------*/

void printDbgInstr(U8 addr)
{
	/*display in assembler and in binary*/
	
	U8 current_byte;	/*lookahead from addr*/
	U1 raw[11];			/*buffer to hold binary representation*/

	current_byte = addr;
		
	printf("address->"); pU8(addr); printf("\n");

	switch(RAM[current_byte])
	{
		case LBI:	/* LBI $r1, byte constant  BBB */
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品三级久久久久三级| 国产一区二区不卡在线| 日本欧美韩国一区三区| www.色综合.com| 日韩午夜电影在线观看| 一区二区三区视频在线看| 国产成人免费av在线| 欧美日韩在线精品一区二区三区激情| 国产欧美视频在线观看| 热久久久久久久| 欧美色综合影院| 中文字幕一区二区三区在线不卡| 精品亚洲成a人在线观看| 欧美日韩不卡在线| 亚洲视频一区在线观看| 懂色一区二区三区免费观看| 欧美成人一区二区三区| 亚洲大片一区二区三区| 日本精品视频一区二区三区| 欧美国产综合色视频| 国产一区二区主播在线| 日韩欧美一级在线播放| 天堂资源在线中文精品| 在线观看91精品国产入口| 中文字幕色av一区二区三区| 国产成人在线观看免费网站| 日韩精品影音先锋| 久久se这里有精品| 日韩欧美国产一区在线观看| 五月天丁香久久| 欧美日免费三级在线| 亚洲综合av网| 欧美午夜宅男影院| 五月激情综合网| 欧美人与z0zoxxxx视频| 午夜久久电影网| 欧美日韩亚洲综合一区| 午夜影院在线观看欧美| 欧美日本国产视频| 美女网站视频久久| 精品国产伦一区二区三区免费| 美女www一区二区| 精品成a人在线观看| 国产尤物一区二区| 亚洲国产经典视频| 91在线观看下载| 一区二区三区成人在线视频| 欧美女孩性生活视频| 91丨九色丨国产丨porny| 《视频一区视频二区| 一本久久a久久免费精品不卡| 亚洲免费观看高清完整版在线| 91麻豆视频网站| 日韩精品一二三区| 精品国产在天天线2019| 成人综合婷婷国产精品久久免费| 亚洲视频每日更新| 欧美日韩日本视频| 韩日av一区二区| 亚洲色欲色欲www| 欧美理论在线播放| 国产一区啦啦啦在线观看| 国产精品美女久久久久久久久 | 亚洲国产精品高清| 欧美在线你懂的| 久久精品av麻豆的观看方式| 国产视频一区二区在线| 在线观看不卡一区| 国产麻豆成人精品| 一区二区免费看| 国产亚洲综合av| 欧美日本在线观看| 国产91精品露脸国语对白| 午夜影院久久久| 国产精品美女视频| 日韩欧美综合一区| 色域天天综合网| 国产综合色在线| 亚洲尤物在线视频观看| 久久久久久免费网| 欧美肥妇bbw| 91亚洲精品久久久蜜桃| 久久精品国产亚洲a| 一区二区三区在线看| 久久久午夜精品理论片中文字幕| 欧美图片一区二区三区| 成人黄页在线观看| 国产一区二区三区四| 午夜影院在线观看欧美| 亚洲欧美日韩在线不卡| 国产视频911| 日韩欧美三级在线| 欧美亚洲自拍偷拍| 99久久精品情趣| 国产成都精品91一区二区三| 青草av.久久免费一区| 亚洲一区二区视频| 亚洲女人****多毛耸耸8| 日本一区二区三区高清不卡 | 日本韩国欧美三级| 国产裸体歌舞团一区二区| 午夜日韩在线电影| 亚洲精品欧美综合四区| 国产精品乱码人人做人人爱 | 日韩欧美专区在线| 欧美日韩国产片| 欧美日精品一区视频| 国产精品毛片久久久久久久| 欧美精品一区男女天堂| 欧美成人a在线| 日韩三级视频中文字幕| 欧美一区二区三区性视频| 欧美私模裸体表演在线观看| 一本大道久久a久久精二百| 99re热这里只有精品免费视频| 成人丝袜18视频在线观看| 成人福利在线看| 成人激情开心网| 成人av资源网站| 91丝袜美腿高跟国产极品老师| 9l国产精品久久久久麻豆| 大陆成人av片| 色综合久久天天| 欧美性一二三区| 欧美日韩不卡一区二区| 欧美一区三区二区| 日韩精品专区在线影院重磅| 久久色在线视频| 日本一区二区视频在线| 亚洲天堂久久久久久久| 亚洲成年人网站在线观看| 天天色天天操综合| 国产综合久久久久影院| 成人午夜视频在线观看| 色综合久久九月婷婷色综合| 在线观看亚洲专区| 3d成人h动漫网站入口| 日韩欧美资源站| 国产精品二区一区二区aⅴ污介绍| 国产精品亲子乱子伦xxxx裸| 一区二区三区波多野结衣在线观看| 亚洲一线二线三线久久久| 日韩中文字幕1| 国产传媒欧美日韩成人| 色悠久久久久综合欧美99| 制服丝袜亚洲色图| 国产午夜精品美女毛片视频| 亚洲欧美日韩国产另类专区| 日韩精品91亚洲二区在线观看| 韩日欧美一区二区三区| 色8久久精品久久久久久蜜| 日韩精品一区二区三区在线| 国产精品你懂的| 蜜臀久久99精品久久久久宅男| 大胆亚洲人体视频| 91精品免费在线观看| 国产精品素人一区二区| 亚洲成人免费视频| 成人性生交大片免费看中文网站| 在线观看日韩av先锋影音电影院| 欧美大胆人体bbbb| 依依成人综合视频| 国产成人综合网站| 欧美日韩国产一区二区三区地区| 国产午夜精品久久| 日韩高清一区在线| 日本韩国一区二区三区视频| 久久精品一区二区三区不卡| 亚洲在线观看免费| 成人91在线观看| 久久久久久久久久久久久久久99 | 欧美日韩午夜在线| 国产精品护士白丝一区av| 日韩成人一级片| 欧洲精品在线观看| 国产亚洲一区二区三区| 免费在线视频一区| 欧洲色大大久久| 亚洲人成在线播放网站岛国| 国产精品一二三四| 精品日产卡一卡二卡麻豆| 午夜精品福利在线| 欧美三级欧美一级| 亚洲精品中文在线影院| 日韩精品一区二区三区老鸭窝| 午夜a成v人精品| 欧美在线综合视频| 亚洲激情中文1区| 91丨九色丨国产丨porny| 欧美韩国日本综合| 成人高清免费观看| 国产精品免费视频网站| 成人综合激情网| 欧美韩日一区二区三区四区| 国产成人在线色| 国产精品欧美一区喷水| 99久久婷婷国产综合精品电影| 国产亚洲成aⅴ人片在线观看| 国产一区二区在线电影| 久久亚洲私人国产精品va媚药|