static int cmd_info(char*args){ unsigned char*res=NULL; char *arg=strtok(NULL," "); if(arg==NULL){ printf("No Argument!\n"); } if(strcmp(arg,"r")==0) { int i; /*output eip*/ res = (unsigned char*)(&cpu.eip); printf("eip:%02x %02x %02x %02x\n",*(res+3),*(res+2),*(res+1),*res); for(i=R_EAX;i<=R_EDI;i++) { res =(unsigned char*)(®_l(i)); printf("%s:%02x %02x %02x %02x\n",regsl[i],*(res+3),*(res+2),*(res+1),*res); } res = (unsigned char*)(&cpu.GDTR.base); printf("%s:%02x %02x %02x %02x","GDTR",*(res+3),*(res+2),*(res+1),*res); res = (unsigned char*)(&cpu.GDTR.limit); printf(" %02x %02x\n",*(res+1),*res); res = (unsigned char*)(&cpu.cr0.val); printf("%s:%02x %02x %02x %02x\n","CR0",*(res+3),*(res+2),*(res+1),*res); for(i = R_ES; i <= R_DS; i ++){ res = (unsigned char*)(&sreg(i)); printf("%s:%02x %02x\n",sregs[i],*(res + 1),*res); } printf("%s %s %s %s %s %s\n","OF","SF","ZF","AF","PF","CF"); printf("%2d %2d %2d %2d %2d %2d\n",cpu.OF,cpu.SF,cpu.ZF,cpu.AF,cpu.PF,cpu.CF); } else if(strcmp(arg,"w")==0) print_wp(); else printf("No Such Command!\n"); return 0; }
static int cmd_info(char *args) { char command; if(args == NULL){ printf("please input arguments\n"); return 0; } if(sscanf(args,"%c",&command) != 1){ printf("wrong argument\n"); return 0; } if(command == 'r'){ //print the rigisters int i = 0; for(i = 0;i < 8; ++i){ printf("%s\t0x%x\t\t%u\n",regsl[i],reg_l(i),reg_l(i)); } for(i = 0;i < 8; ++i){ printf("%s\t0x%x\t\t%u\n",regsw[i],reg_w(i),reg_w(i)); } for(i = 0;i < 8; ++i){ printf("%s\t0x%x\t\t%u\n",regsb[i],reg_b(i),reg_b(i)); } printf("eip\t0x%x\t%d\n",cpu.eip,cpu.eip); printf("eflags\t0x%8x\t%d\n",cpu.eflags, cpu.eflags); printf("CF\t%x\n",cpu.CF); printf("PF\t%x\n",cpu.PF); printf("ZF\t%x\n",cpu.ZF); printf("SF\t%x\n",cpu.SF); printf("IF\t%x\n",cpu.IF); printf("DF\t%x\n",cpu.DF); printf("OF\t%x\n",cpu.OF); }else if(command == 'w'){ //打印监视点信息 print_wp(); }else{ printf("Unknown command: info %c\n",command); } return 0; }