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

📄 dis.c

📁 mips架构的bootloader,99左右的版本 但源代码现在没人更新了
💻 C
字号:
/************************************************************* * File: mon/dis.c * Purpose: Part of core Monitor * Author: Phil Bunce (pjb@carmel.com) * Revision History: *	970304	Start of revision history *	970507	Added mips16 disassembly */#include <mon.h>Optdesc l_opts[] = {	{"[-bct][adr [cnt]]","list (disassemble) memory"},        {"-b","list only branches"},        {"-c","list only calls"},        {"-t","list trace buffer"},        {"-T","assume TinyRISC instrs"},	{0}};/* used by -b option, list only branches */char *brlst[] = {        "j","jr","jal","jalr","break","syscall","rfe","beq","bne",        "bltzal","bltz","blez","bgtz","bgezal","bgez",        "bc0t","bc0f","bc1t","bc1f","bc2t","bc2f","bc3t","bc3f",        "blezl","bgtzl","bltzl","bgezl","bltzall","bgezall",        "bc0tl","bc0fl","bc1tl","bc1fl","bc2tl","bc2fl","bc3tl","bc3fl",        "beql","bnel",        0};/* used by -c option, list only calls */char *cllst[] = {"jal","jalr","bgezal","bltzal","bgezall","bltzall",0};/**************************************************************  dis(ac,av)*	the 'l' (disassemble) command*/dis(ac,av)int ac;char *av[];{Ulong adr, siz, l;char v;char instr[20],*p,**q;int bflag,cflag,i,j,n,tflag,Tflag;bflag = cflag = n = tflag = Tflag = 0;if (!regChain) {	printf("Target Description Driver not loaded\n");	return(1);	}if (!atob(&siz,getMonEnv("moresz"),10)) {	printf("%s: bad moresz value\n",getMonEnv("moresz"));	return(1);	}adr = getPc();for (i=1;i<ac;i++) {	if (av[i][0] == '-') {		for (j=1;av[i][j] != 0;j++) {			switch (av[i][j]) {				case 'b' : bflag=1; break;				case 'c' : cflag=1; break;				case 't' : tflag=1; n++; break;				case 'T' : Tflag=1; break; /* mips16 */				default  : 					printf("%c: unknown option\n",av[i][j]);				}			}		}	else {		switch (n) {			case 0 :				if(!get_rsa(&adr,av[i])) return(1);				break;			case 1 :				if(!get_rsa(&siz,av[i])) return(1);				break;			default :				printf("%s: unknown option\n",av[i]);				return(1);			}		n++;		}	}ioctl_cbreak(0L);if (tflag) {	dispchist(n,siz);	return(0);	}l = siz;if (Tflag) adr |= 1; /* set the LS bit */*prnbuf = 0;if (cflag || bflag) printf("%s",searching);while (1) {	adr = disasm(prnbuf,adr,read_target(XT_MEM,adr,4));        if (bflag || cflag) {                for (p=prnbuf,i=0;p != 0 && i < 3;i++) p = getword(instr,p);                if (cflag) q = cllst;                else q = brlst;                for (i=0;q[i] != 0;i++) {                        if (strequ(instr,q[i])) break;                        }                if (q[i] == 0) {                        dotik(128,0);                        continue;                        }                else era_line(searching);                }        if (more(prnbuf,&l,(n>1)?0:siz)) break;        if (cflag || bflag) printf("%s",searching);	}}/**************************************************************  dispchist(args,siz)*	display the pc history (trace buffer)*/dispchist(args,siz)int args,siz;{int i,l;unsigned long adr;l = siz;for (i=0;;i++) {	adr = getpchist(i);	if (adr == 0) break;	disasm(prnbuf,adr,read_target(XT_MEM,adr,4));	if (more(prnbuf,&l,(args>1)?0:siz)) break;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -