Changeset 35697 in vbox
- Timestamp:
- Jan 24, 2011 6:13:26 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 69626
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp
r35696 r35697 921 921 static DECLCALLBACK(int) dbgcCmdUnassemble(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs) 922 922 { 923 PDBGC 923 PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); 924 924 925 925 /* 926 926 * Validate input. 927 927 */ 928 if ( cArgs > 1 929 || (cArgs == 1 && !DBGCVAR_ISPOINTER(paArgs[0].enmType))) 930 return pCmdHlp->pfnPrintf(pCmdHlp, NULL, "internal error: The parser doesn't do its job properly yet.. It might help to use the '%%' operator.\n"); 931 if (!pVM && !cArgs && !DBGCVAR_ISPOINTER(pDbgc->DisasmPos.enmType)) 932 return pCmdHlp->pfnPrintf(pCmdHlp, NULL, "error: Don't know where to start disassembling...\n"); 933 if (!pVM && cArgs && DBGCVAR_ISGCPOINTER(paArgs[0].enmType)) 934 return pCmdHlp->pfnPrintf(pCmdHlp, NULL, "error: GC address but no VM.\n"); 935 928 DBGC_CMDHLP_REQ_VM_RET(pCmdHlp, pCmd, pVM); 929 DBGC_CMDHLP_ASSERT_PARSER_RET(pCmdHlp, pCmd, -1, cArgs <= 1); 930 DBGC_CMDHLP_ASSERT_PARSER_RET(pCmdHlp, pCmd, 0, cArgs == 0 || DBGCVAR_ISPOINTER(paArgs[0].enmType)); 931 932 if (!cArgs && !DBGCVAR_ISPOINTER(pDbgc->DisasmPos.enmType)) 933 return DBGCCmdHlpFail(pCmdHlp, pCmd, "Don't know where to start disassembling"); 934 935 /* 936 * Check the desired mode. 937 */ 936 938 unsigned fFlags = DBGF_DISAS_FLAGS_NO_ADDRESS; 937 938 /*939 * Check the desired mode.940 */941 939 switch (pCmd->pszCmd[1]) 942 940 { … … 956 954 if (!DBGCVAR_ISPOINTER(pDbgc->DisasmPos.enmType)) 957 955 { 956 /** @todo Batch query CS, RIP & CPU mode. */ 958 957 PVMCPU pVCpu = VMMGetCpuById(pVM, pDbgc->idCpu); 959 958 if ( pDbgc->fRegCtxGuest … … 993 992 case DBGCVAR_RANGE_ELEMENTS: 994 993 if (pDbgc->DisasmPos.u64Range > 2048) 995 return pCmdHlp->pfnPrintf(pCmdHlp, NULL, "error: Too many lines requested. Max is 2048 lines.\n");994 return DBGCCmdHlpFail(pCmdHlp, pCmd, "Too many lines requested. Max is 2048 lines"); 996 995 break; 997 996 998 997 case DBGCVAR_RANGE_BYTES: 999 998 if (pDbgc->DisasmPos.u64Range > 65536) 1000 return pCmdHlp->pfnPrintf(pCmdHlp, NULL, "error: The requested range is too big. Max is 64KB.\n");999 return DBGCCmdHlpFail(pCmdHlp, pCmd, "The requested range is too big. Max is 64KB"); 1001 1000 break; 1002 1001 1003 1002 default: 1004 return pCmdHlp->pfnPrintf(pCmdHlp, NULL, "internal error: Unknown range type %d.\n", pDbgc->DisasmPos.enmRangeType);1003 return DBGCCmdHlpFail(pCmdHlp, pCmd, "Unknown range type %d", pDbgc->DisasmPos.enmRangeType); 1005 1004 } 1006 1005 … … 1021 1020 rc = DBGCCmdHlpEval(pCmdHlp, &VarTmp, "%%(%Dv)", &pDbgc->DisasmPos); 1022 1021 if (RT_FAILURE(rc)) 1023 return pCmdHlp->pfnPrintf(pCmdHlp, NULL, "error: failed to evaluate '%%(%Dv)' -> %Rrc .\n", &pDbgc->DisasmPos, rc);1022 return DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "failed to evaluate '%%(%Dv)'", &pDbgc->DisasmPos); 1024 1023 pDbgc->DisasmPos = VarTmp; 1025 1024 break; … … 1061 1060 { 1062 1061 /* print it */ 1063 rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, "%-16DV %s\n", &pDbgc->DisasmPos, &szDis[0]);1062 rc = DBGCCmdHlpPrintf(pCmdHlp, "%-16DV %s\n", &pDbgc->DisasmPos, &szDis[0]); 1064 1063 if (RT_FAILURE(rc)) 1065 1064 return rc; … … 1068 1067 { 1069 1068 /* bitch. */ 1070 rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, "Failed to disassemble instruction, skipping one byte.\n");1069 rc = DBGCCmdHlpPrintf(pCmdHlp, "Failed to disassemble instruction, skipping one byte.\n"); 1071 1070 if (RT_FAILURE(rc)) 1072 1071 return rc; 1073 1072 if (cTries-- > 0) 1074 return pCmdHlp->pfnVBoxError(pCmdHlp, rc, "Too many disassembly failures. Giving up.\n");1073 return DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "Too many disassembly failures. Giving up"); 1075 1074 cbInstr = 1; 1076 1075 } … … 1085 1084 rc = DBGCCmdHlpEval(pCmdHlp, &pDbgc->DisasmPos, "(%Dv) + %x", &pDbgc->DisasmPos, cbInstr); 1086 1085 if (RT_FAILURE(rc)) 1087 return pCmdHlp->pfnVBoxError(pCmdHlp, rc, "Expression: (%Dv) + %x\n", &pDbgc->DisasmPos, cbInstr);1086 return DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "DBGCCmdHlpEval(,,'(%Dv) + %x')", &pDbgc->DisasmPos, cbInstr); 1088 1087 if (iRangeLeft <= 0) 1089 1088 break; … … 1092 1091 1093 1092 NOREF(pCmd); 1094 return 0;1093 return VINF_SUCCESS; 1095 1094 } 1096 1095
Note:
See TracChangeset
for help on using the changeset viewer.