模拟dos下面的Debug下子命令D的功能,显示内存数据的程序
还有子命令错误位置提示的功能和 d 命令的 l 参数没有实现;l 后面接数字表示要显示的个数,
在解析子命令的时候本想用语法和此法分析的方法,但功力不够,《the c++ language 》里面的那个词法语法分析的简单计算的代码都看不懂,只能进行字符串判断来处理了。代码写的很冗余·············
#define unit(m,n) (*(unsigned char far *)( m*0x10000 + n))
int showNum = 0x80 ; /*要显示的数字的个数*/
int sec = 0; /*要现实的段地址,在getToken里面如果没有给定的话,会赋予DS的值*/
int offset = 0; /*当前偏移地址*/
int dcount = 0,ccount = 0; /*记录已经输出了的内存字节和对应的字符的个数*/
int errorppos=1; /*出错位置标记,没有实现*/
int str2Hex( char *pstr); /*将十六进制字符串转化为数字*/
void show(); /*从当前偏移地址开始,显示showNum个字符*/
void showLine( unsigned int o); /*根据传入的便宜地址显示内存数据,以及对应的ascii值*/
int getToken(char *); /*分析d子命令,将结果写给全局变量sec和offset*/
void Driver(char *); /*根据用户的输入的字符串,调用子命令分析函数,根据返回结果做出相应的操作*/
int valueLegal(char *); /*传入的参数应该是分离出来的段地址或者偏移地址,判断要转换的十六进制字符串是否合法*/
main()
{
char buf[100];
sec=_DS; /*默认偏移地址*/
offset=0x0080; /*因为按下d,偏移地址会自加 showNum*/
printf("-----------------------------------Lee'S Debug---------------------------------\n");
while(1) /*showLine(_DS,0x1009);*/
{
printf("-");
gets(buf);
Driver(buf);
memset(buf,0,100);
}
}
void Driver(char * pstr)
{
showNum