- Timestamp:
- Jan 18, 2011 2:44:19 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 69511
- Location:
- trunk/src/VBox/Debugger
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp
r35410 r35614 356 356 { "r", 0, 2, &g_aArgReg[0], RT_ELEMENTS(g_aArgReg), NULL, 0, dbgcCmdReg, "[reg [newval]]", "Show or set register(s) - active reg set." }, 357 357 { "rg", 0, 2, &g_aArgReg[0], RT_ELEMENTS(g_aArgReg), NULL, 0, dbgcCmdRegGuest, "[reg [newval]]", "Show or set register(s) - guest reg set." }, 358 { "rg32", 0, 0, NULL, 0, NULL, 0, dbgcCmdRegGuest, "", "Show 32-bit guest registers." }, 359 { "rg64", 0, 0, NULL, 0, NULL, 0, dbgcCmdRegGuest, "", "Show 64-bit guest registers." }, 358 360 { "rh", 0, 2, &g_aArgReg[0], RT_ELEMENTS(g_aArgReg), NULL, 0, dbgcCmdRegHyper, "[reg [newval]]", "Show or set register(s) - hypervisor reg set." }, 359 361 { "rt", 0, 0, NULL, 0, NULL, 0, dbgcCmdRegTerse, "", "Toggles terse / verbose register info." }, 360 { "s", 0, ~0, &g_aArgSearchMem[0], RT_ELEMENTS(g_aArgSearchMem), NULL,0, dbgcCmdSearchMem, "[options] <range> <pattern>", "Continue last search." },362 { "s", 0, ~0, &g_aArgSearchMem[0], RT_ELEMENTS(g_aArgSearchMem), NULL, 0, dbgcCmdSearchMem, "[options] <range> <pattern>", "Continue last search." }, 361 363 { "sa", 2, ~0, &g_aArgSearchMemType[0], RT_ELEMENTS(g_aArgSearchMemType), NULL, 0, dbgcCmdSearchMemType, "<range> <pattern>", "Search memory for an ascii string." }, 362 364 { "sb", 2, ~0, &g_aArgSearchMemType[0], RT_ELEMENTS(g_aArgSearchMemType), NULL, 0, dbgcCmdSearchMemType, "<range> <pattern>", "Search memory for one or more bytes." }, … … 1339 1341 PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); 1340 1342 1341 /* 1342 * cArgs == 0: Show all 1343 */ 1344 if (cArgs == 0) 1345 { 1346 /* 1347 * Get register context. 1348 */ 1349 PVMCPU pVCpu = VMMGetCpuById(pVM, pDbgc->idCpu); 1350 int rc; 1351 PCPUMCTX pCtx; 1352 PCCPUMCTXCORE pCtxCore; 1353 if (!*pszPrefix) 1354 { 1355 pCtx = CPUMQueryGuestCtxPtr(pVCpu); 1356 pCtxCore = CPUMCTX2CORE(pCtx); 1357 rc = VINF_SUCCESS; 1358 } 1359 else 1360 { 1361 rc = CPUMQueryHyperCtxPtr(pVCpu, &pCtx); 1362 pCtxCore = CPUMGetHyperCtxCore(pVCpu); 1363 } 1364 if (RT_FAILURE(rc)) 1365 return pCmdHlp->pfnVBoxError(pCmdHlp, rc, "Getting register context\n"); 1366 1367 /* 1368 * Format the flags. 1369 */ 1370 static struct 1371 { 1372 const char *pszSet; const char *pszClear; uint32_t fFlag; 1373 } aFlags[] = 1374 { 1375 { "vip",NULL, X86_EFL_VIP }, 1376 { "vif",NULL, X86_EFL_VIF }, 1377 { "ac", NULL, X86_EFL_AC }, 1378 { "vm", NULL, X86_EFL_VM }, 1379 { "rf", NULL, X86_EFL_RF }, 1380 { "nt", NULL, X86_EFL_NT }, 1381 { "ov", "nv", X86_EFL_OF }, 1382 { "dn", "up", X86_EFL_DF }, 1383 { "ei", "di", X86_EFL_IF }, 1384 { "tf", NULL, X86_EFL_TF }, 1385 { "ng", "pl", X86_EFL_SF }, 1386 { "zr", "nz", X86_EFL_ZF }, 1387 { "ac", "na", X86_EFL_AF }, 1388 { "po", "pe", X86_EFL_PF }, 1389 { "cy", "nc", X86_EFL_CF }, 1390 }; 1391 char szEFlags[80]; 1392 char *psz = szEFlags; 1393 uint32_t efl = pCtxCore->eflags.u32; 1394 for (unsigned i = 0; i < RT_ELEMENTS(aFlags); i++) 1395 { 1396 const char *pszAdd = aFlags[i].fFlag & efl ? aFlags[i].pszSet : aFlags[i].pszClear; 1397 if (pszAdd) 1398 { 1399 strcpy(psz, pszAdd); 1400 psz += strlen(pszAdd); 1401 *psz++ = ' '; 1402 } 1403 } 1404 psz[-1] = '\0'; 1405 1406 1407 /* 1408 * Format the registers. 1409 */ 1410 if (pDbgc->fRegTerse) 1411 { 1412 if (CPUMIsGuestIn64BitCodeEx(pCtx)) 1413 { 1414 rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, 1415 "%srax=%016RX64 %srbx=%016RX64 %srcx=%016RX64 %srdx=%016RX64\n" 1416 "%srsi=%016RX64 %srdi=%016RX64 %sr8 =%016RX64 %sr9 =%016RX64\n" 1417 "%sr10=%016RX64 %sr11=%016RX64 %sr12=%016RX64 %sr13=%016RX64\n" 1418 "%sr14=%016RX64 %sr15=%016RX64\n" 1419 "%srip=%016RX64 %srsp=%016RX64 %srbp=%016RX64 %siopl=%d %*s\n" 1420 "%scs=%04x %sds=%04x %ses=%04x %sfs=%04x %sgs=%04x %sss=%04x %seflags=%08x\n", 1421 pszPrefix, pCtxCore->rax, pszPrefix, pCtxCore->rbx, pszPrefix, pCtxCore->rcx, pszPrefix, pCtxCore->rdx, pszPrefix, pCtxCore->rsi, pszPrefix, pCtxCore->rdi, 1422 pszPrefix, pCtxCore->r8, pszPrefix, pCtxCore->r9, pszPrefix, pCtxCore->r10, pszPrefix, pCtxCore->r11, pszPrefix, pCtxCore->r12, pszPrefix, pCtxCore->r13, 1423 pszPrefix, pCtxCore->r14, pszPrefix, pCtxCore->r15, 1424 pszPrefix, pCtxCore->rip, pszPrefix, pCtxCore->rsp, pszPrefix, pCtxCore->rbp, pszPrefix, X86_EFL_GET_IOPL(efl), *pszPrefix ? 34 : 31, szEFlags, 1425 pszPrefix, (RTSEL)pCtxCore->cs, pszPrefix, (RTSEL)pCtxCore->ds, pszPrefix, (RTSEL)pCtxCore->es, 1426 pszPrefix, (RTSEL)pCtxCore->fs, pszPrefix, (RTSEL)pCtxCore->gs, pszPrefix, (RTSEL)pCtxCore->ss, pszPrefix, efl); 1427 } 1428 else 1429 rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, 1430 "%seax=%08x %sebx=%08x %secx=%08x %sedx=%08x %sesi=%08x %sedi=%08x\n" 1431 "%seip=%08x %sesp=%08x %sebp=%08x %siopl=%d %*s\n" 1432 "%scs=%04x %sds=%04x %ses=%04x %sfs=%04x %sgs=%04x %sss=%04x %seflags=%08x\n", 1433 pszPrefix, pCtxCore->eax, pszPrefix, pCtxCore->ebx, pszPrefix, pCtxCore->ecx, pszPrefix, pCtxCore->edx, pszPrefix, pCtxCore->esi, pszPrefix, pCtxCore->edi, 1434 pszPrefix, pCtxCore->eip, pszPrefix, pCtxCore->esp, pszPrefix, pCtxCore->ebp, pszPrefix, X86_EFL_GET_IOPL(efl), *pszPrefix ? 34 : 31, szEFlags, 1435 pszPrefix, (RTSEL)pCtxCore->cs, pszPrefix, (RTSEL)pCtxCore->ds, pszPrefix, (RTSEL)pCtxCore->es, 1436 pszPrefix, (RTSEL)pCtxCore->fs, pszPrefix, (RTSEL)pCtxCore->gs, pszPrefix, (RTSEL)pCtxCore->ss, pszPrefix, efl); 1437 } 1438 else 1439 { 1440 if (CPUMIsGuestIn64BitCodeEx(pCtx)) 1441 { 1442 rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, 1443 "%srax=%016RX64 %srbx=%016RX64 %srcx=%016RX64 %srdx=%016RX64\n" 1444 "%srsi=%016RX64 %srdi=%016RX64 %sr8 =%016RX64 %sr9 =%016RX64\n" 1445 "%sr10=%016RX64 %sr11=%016RX64 %sr12=%016RX64 %sr13=%016RX64\n" 1446 "%sr14=%016RX64 %sr15=%016RX64\n" 1447 "%srip=%016RX64 %srsp=%016RX64 %srbp=%016RX64 %siopl=%d %*s\n" 1448 "%scs={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1449 "%sds={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1450 "%ses={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1451 "%sfs={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1452 "%sgs={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1453 "%sss={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1454 "%scr0=%016RX64 %scr2=%016RX64 %scr3=%016RX64 %scr4=%016RX64\n" 1455 "%sdr0=%016RX64 %sdr1=%016RX64 %sdr2=%016RX64 %sdr3=%016RX64\n" 1456 "%sdr4=%016RX64 %sdr5=%016RX64 %sdr6=%016RX64 %sdr7=%016RX64\n" 1457 "%sgdtr=%016RX64:%04x %sidtr=%016RX64:%04x %seflags=%08x\n" 1458 "%sldtr={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1459 "%str ={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1460 "%sSysEnter={cs=%04llx eip=%016RX64 esp=%016RX64}\n" 1461 , 1462 pszPrefix, pCtxCore->rax, pszPrefix, pCtxCore->rbx, pszPrefix, pCtxCore->rcx, pszPrefix, pCtxCore->rdx, pszPrefix, pCtxCore->rsi, pszPrefix, pCtxCore->rdi, 1463 pszPrefix, pCtxCore->r8, pszPrefix, pCtxCore->r9, pszPrefix, pCtxCore->r10, pszPrefix, pCtxCore->r11, pszPrefix, pCtxCore->r12, pszPrefix, pCtxCore->r13, 1464 pszPrefix, pCtxCore->r14, pszPrefix, pCtxCore->r15, 1465 pszPrefix, pCtxCore->rip, pszPrefix, pCtxCore->rsp, pszPrefix, pCtxCore->rbp, pszPrefix, X86_EFL_GET_IOPL(efl), *pszPrefix ? 33 : 31, szEFlags, 1466 pszPrefix, (RTSEL)pCtxCore->cs, pCtx->csHid.u64Base, pCtx->csHid.u32Limit, pCtx->csHid.Attr.u, 1467 pszPrefix, (RTSEL)pCtxCore->ds, pCtx->dsHid.u64Base, pCtx->dsHid.u32Limit, pCtx->dsHid.Attr.u, 1468 pszPrefix, (RTSEL)pCtxCore->es, pCtx->esHid.u64Base, pCtx->esHid.u32Limit, pCtx->esHid.Attr.u, 1469 pszPrefix, (RTSEL)pCtxCore->fs, pCtx->fsHid.u64Base, pCtx->fsHid.u32Limit, pCtx->fsHid.Attr.u, 1470 pszPrefix, (RTSEL)pCtxCore->gs, pCtx->gsHid.u64Base, pCtx->gsHid.u32Limit, pCtx->gsHid.Attr.u, 1471 pszPrefix, (RTSEL)pCtxCore->ss, pCtx->ssHid.u64Base, pCtx->ssHid.u32Limit, pCtx->ssHid.Attr.u, 1472 pszPrefix, pCtx->cr0, pszPrefix, pCtx->cr2, pszPrefix, pCtx->cr3, pszPrefix, pCtx->cr4, 1473 pszPrefix, pCtx->dr[0], pszPrefix, pCtx->dr[1], pszPrefix, pCtx->dr[2], pszPrefix, pCtx->dr[3], 1474 pszPrefix, pCtx->dr[4], pszPrefix, pCtx->dr[5], pszPrefix, pCtx->dr[6], pszPrefix, pCtx->dr[7], 1475 pszPrefix, pCtx->gdtr.pGdt, pCtx->gdtr.cbGdt, pszPrefix, pCtx->idtr.pIdt, pCtx->idtr.cbIdt, pszPrefix, efl, 1476 pszPrefix, (RTSEL)pCtx->ldtr, pCtx->ldtrHid.u64Base, pCtx->ldtrHid.u32Limit, pCtx->ldtrHid.Attr.u, 1477 pszPrefix, (RTSEL)pCtx->tr, pCtx->trHid.u64Base, pCtx->trHid.u32Limit, pCtx->trHid.Attr.u, 1478 pszPrefix, pCtx->SysEnter.cs, pCtx->SysEnter.eip, pCtx->SysEnter.esp); 1479 1480 rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, 1481 "MSR:\n" 1482 "%sEFER =%016RX64\n" 1483 "%sPAT =%016RX64\n" 1484 "%sSTAR =%016RX64\n" 1485 "%sCSTAR =%016RX64\n" 1486 "%sLSTAR =%016RX64\n" 1487 "%sSFMASK =%016RX64\n" 1488 "%sKERNELGSBASE =%016RX64\n", 1489 pszPrefix, pCtx->msrEFER, 1490 pszPrefix, pCtx->msrPAT, 1491 pszPrefix, pCtx->msrSTAR, 1492 pszPrefix, pCtx->msrCSTAR, 1493 pszPrefix, pCtx->msrLSTAR, 1494 pszPrefix, pCtx->msrSFMASK, 1495 pszPrefix, pCtx->msrKERNELGSBASE); 1496 } 1497 else 1498 rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, 1499 "%seax=%08x %sebx=%08x %secx=%08x %sedx=%08x %sesi=%08x %sedi=%08x\n" 1500 "%seip=%08x %sesp=%08x %sebp=%08x %siopl=%d %*s\n" 1501 "%scs={%04x base=%016RX64 limit=%08x flags=%08x} %sdr0=%016RX64 %sdr1=%016RX64\n" 1502 "%sds={%04x base=%016RX64 limit=%08x flags=%08x} %sdr2=%016RX64 %sdr3=%016RX64\n" 1503 "%ses={%04x base=%016RX64 limit=%08x flags=%08x} %sdr4=%016RX64 %sdr5=%016RX64\n" 1504 "%sfs={%04x base=%016RX64 limit=%08x flags=%08x} %sdr6=%016RX64 %sdr7=%016RX64\n" 1505 "%sgs={%04x base=%016RX64 limit=%08x flags=%08x} %scr0=%016RX64 %scr2=%016RX64\n" 1506 "%sss={%04x base=%016RX64 limit=%08x flags=%08x} %scr3=%016RX64 %scr4=%016RX64\n" 1507 "%sgdtr=%016RX64:%04x %sidtr=%016RX64:%04x %seflags=%08x\n" 1508 "%sldtr={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1509 "%str ={%04x base=%016RX64 limit=%08x flags=%08x}\n" 1510 "%sSysEnter={cs=%04llx eip=%08llx esp=%08llx}\n" 1511 "%sFCW=%04x %sFSW=%04x %sFTW=%04x\n" 1512 , 1513 pszPrefix, pCtxCore->eax, pszPrefix, pCtxCore->ebx, pszPrefix, pCtxCore->ecx, pszPrefix, pCtxCore->edx, pszPrefix, pCtxCore->esi, pszPrefix, pCtxCore->edi, 1514 pszPrefix, pCtxCore->eip, pszPrefix, pCtxCore->esp, pszPrefix, pCtxCore->ebp, pszPrefix, X86_EFL_GET_IOPL(efl), *pszPrefix ? 33 : 31, szEFlags, 1515 pszPrefix, (RTSEL)pCtxCore->cs, pCtx->csHid.u64Base, pCtx->csHid.u32Limit, pCtx->csHid.Attr.u, pszPrefix, pCtx->dr[0], pszPrefix, pCtx->dr[1], 1516 pszPrefix, (RTSEL)pCtxCore->ds, pCtx->dsHid.u64Base, pCtx->dsHid.u32Limit, pCtx->dsHid.Attr.u, pszPrefix, pCtx->dr[2], pszPrefix, pCtx->dr[3], 1517 pszPrefix, (RTSEL)pCtxCore->es, pCtx->esHid.u64Base, pCtx->esHid.u32Limit, pCtx->esHid.Attr.u, pszPrefix, pCtx->dr[4], pszPrefix, pCtx->dr[5], 1518 pszPrefix, (RTSEL)pCtxCore->fs, pCtx->fsHid.u64Base, pCtx->fsHid.u32Limit, pCtx->fsHid.Attr.u, pszPrefix, pCtx->dr[6], pszPrefix, pCtx->dr[7], 1519 pszPrefix, (RTSEL)pCtxCore->gs, pCtx->gsHid.u64Base, pCtx->gsHid.u32Limit, pCtx->gsHid.Attr.u, pszPrefix, pCtx->cr0, pszPrefix, pCtx->cr2, 1520 pszPrefix, (RTSEL)pCtxCore->ss, pCtx->ssHid.u64Base, pCtx->ssHid.u32Limit, pCtx->ssHid.Attr.u, pszPrefix, pCtx->cr3, pszPrefix, pCtx->cr4, 1521 pszPrefix, pCtx->gdtr.pGdt,pCtx->gdtr.cbGdt, pszPrefix, pCtx->idtr.pIdt, pCtx->idtr.cbIdt, pszPrefix, pCtxCore->eflags, 1522 pszPrefix, (RTSEL)pCtx->ldtr, pCtx->ldtrHid.u64Base, pCtx->ldtrHid.u32Limit, pCtx->ldtrHid.Attr.u, 1523 pszPrefix, (RTSEL)pCtx->tr, pCtx->trHid.u64Base, pCtx->trHid.u32Limit, pCtx->trHid.Attr.u, 1524 pszPrefix, pCtx->SysEnter.cs, pCtx->SysEnter.eip, pCtx->SysEnter.esp, 1525 pszPrefix, pCtx->fpu.FCW, pszPrefix, pCtx->fpu.FSW, pszPrefix, pCtx->fpu.FTW); 1526 } 1527 1528 /* 1529 * Disassemble one instruction at cs:[r|e]ip. 1530 */ 1531 if (CPUMIsGuestIn64BitCodeEx(pCtx)) 1532 return pCmdHlp->pfnExec(pCmdHlp, "u %016RX64 L 0", pCtx->rip); 1533 return pCmdHlp->pfnExec(pCmdHlp, "u %04x:%08x L 0", pCtx->cs, pCtx->eip); 1534 } 1343 Assert(cArgs != 0); /* handled by caller */ 1535 1344 1536 1345 /* … … 1581 1390 1582 1391 /** 1583 * The 'rg' command.1392 * The 'rg', 'rg64' and 'rg32' commands. 1584 1393 * 1585 1394 * @returns VBox status. … … 1592 1401 static DECLCALLBACK(int) dbgcCmdRegGuest(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult) 1593 1402 { 1403 /* 1404 * Show all registers our selves. 1405 */ 1406 if (cArgs == 0) 1407 { 1408 PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); 1409 bool const f64BitMode = !strcmp(pCmd->pszCmd, "rg64") 1410 || ( !strcmp(pCmd->pszCmd, "rg32") 1411 && CPUMIsGuestIn64BitCodeEx(CPUMQueryGuestCtxPtr(VMMGetCpuById(pVM, pDbgc->idCpu)))); 1412 char szDisAndRegs[8192]; 1413 int rc; 1414 1415 if (pDbgc->fRegTerse) 1416 { 1417 if (f64BitMode) 1418 rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu, &szDisAndRegs[0], sizeof(szDisAndRegs), 1419 "u %016VR{rip} L 0\n" 1420 "rax=%016VR{rax} rbx=%016VR{rbx} rcx=%016VR{rcx} rdx=%016VR{rdx}\n" 1421 "rsi=%016VR{rsi} rdi=%016VR{rdi} r8 =%016VR{r8} r9 =%016VR{r9}\n" 1422 "r10=%016VR{r10} r11=%016VR{r11} r12=%016VR{r12} r13=%016VR{r13}\n" 1423 "r14=%016VR{r14} r15=%016VR{r15} %VRF{rflags}\n" 1424 "rip=%016VR{rip} rsp=%016VR{rsp} rbp=%016VR{rbp}\n" 1425 "cs=%04VR{cs} ds=%04VR{ds} es=%04VR{es} fs=%04VR{fs} gs=%04VR{gs} ss=%04VR{ss} rflags=%08VR{rflags}\n"); 1426 else 1427 rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu, szDisAndRegs, sizeof(szDisAndRegs), 1428 "u %04VR{cs}:%08VR{eip} L 0\n" 1429 "eax=%08VR{eax} ebx=%08VR{ebx} ecx=%08VR{ecx} edx=%08VR{edx} esi=%08VR{esi} edi=%08VR{edi}\n" 1430 "eip=%08VR{eip} esp=%08VR{esp} ebp=%08VR{ebp} %VRF{eflags}\n" 1431 "cs=%04VR{cs} ds=%04VR{ds} es=%04VR{es} fs=%04VR{fs} gs=%04VR{gs} ss=%04VR{ss} eflags=%08VR{eflags}\n"); 1432 } 1433 else 1434 { 1435 if (f64BitMode) 1436 rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu, &szDisAndRegs[0], sizeof(szDisAndRegs), 1437 "u %016VR{rip} L 0\n" 1438 "rax=%016VR{rax} rbx=%016VR{rbx} rcx=%016VR{rcx} rdx=%016VR{rdx}\n" 1439 "rsi=%016VR{rsi} rdi=%016VR{rdi} r8 =%016VR{r8} r9 =%016VR{r9}\n" 1440 "r10=%016VR{r10} r11=%016VR{r11} r12=%016VR{r12} r13=%016VR{r13}\n" 1441 "r14=%016VR{r14} r15=%016VR{r15} %VRF{rflags}\n" 1442 "rip=%016VR{rip} rsp=%016VR{rsp} rbp=%016VR{rbp}\n" 1443 "cs={%04VR{cs} base=%016VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} cr0=%016VR{cr0}\n" 1444 "ds={%04VR{ds} base=%016VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} cr2=%016VR{cr2}\n" 1445 "es={%04VR{es} base=%016VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} cr3=%016VR{cr3}\n" 1446 "fs={%04VR{fs} base=%016VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} cr4=%016VR{cr4}\n" 1447 "gs={%04VR{gs} base=%016VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}} cr8=%016VR{cr8}\n" 1448 "ss={%04VR{ss} base=%016VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}}\n" 1449 "dr0=%016VR{dr0} dr1=%016VR{dr1} dr2=%016VR{dr2} dr3=%016VR{dr3}\n" 1450 "dr6=%016VR{dr6} dr7=%016VR{dr7}\n" 1451 "gdtr=%016VR{gdtr_base}:%04VR{gdtr_limit} idtr=%016VR{idtr_base}:%04VR{idtr_limit} rflags=%08VR{rflags}\n" 1452 "ldtr={%04VR{ldtr} base=%016VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%08VR{ldtr_attr}}\n" 1453 "tr ={%04VR{tr} base=%016VR{tr_base} limit=%08VR{tr_lim} flags=%08VR{tr_attr}}\n" 1454 " sysenter={cs=%04VR{sysenter_cs} eip=%08VR{sysenter_eip} esp=%08VR{sysenter_esp}}\n" 1455 " efer=%016VR{efer}\n" 1456 " pat=%016VR{pat}\n" 1457 " sf_mask=%016VR{sf_mask}\n" 1458 "krnl_gs_base=%016VR{krnl_gs_base}\n" 1459 " lstar=%016VR{lstar}\n" 1460 " star=%016VR{star} cstar=%016VR{cstar}\n" 1461 "fcw=%04VR{fcw} fsw=%04VR{fsw} ftw=%04VR{ftw} mxcsr=%04VR{mxcsr} mxcsr_mask=%04VR{mxcsr_mask}\n" 1462 ); 1463 else 1464 rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu, szDisAndRegs, sizeof(szDisAndRegs), 1465 "u %04VR{cs}:%08VR{eip} L 0\n" 1466 "eax=%08VR{eax} ebx=%08VR{ebx} ecx=%08VR{ecx} edx=%08VR{edx} esi=%08VR{esi} edi=%08VR{edi}\n" 1467 "eip=%08VR{eip} esp=%08VR{esp} ebp=%08VR{ebp} %VRF{eflags}\n" 1468 "cs={%04VR{cs} base=%08VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} dr0=%08VR{dr0} dr1=%08VR{dr1}\n" 1469 "ds={%04VR{ds} base=%08VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} dr2=%08VR{dr2} dr3=%08VR{dr3}\n" 1470 "es={%04VR{es} base=%08VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} dr6=%08VR{dr6} dr6=%08VR{dr6}\n" 1471 "fs={%04VR{fs} base=%08VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} cr0=%08VR{cr0} cr2=%08VR{cr0}\n" 1472 "gs={%04VR{gs} base=%08VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}} cr3=%08VR{cr0} cr4=%08VR{cr0}\n" 1473 "ss={%04VR{ss} base=%08VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}} cr8=%08VR{cr8}\n" 1474 "gdtr=%08VR{gdtr_base}:%04VR{gdtr_limit} idtr=%08VR{idtr_base}:%04VR{idtr_limit} eflags=%08VR{eflags}\n" 1475 "ldtr={%04VR{ldtr} base=%08VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%04VR{ldtr_attr}}\n" 1476 "tr ={%04VR{tr} base=%08VR{tr_base} limit=%08VR{tr_lim} flags=%04VR{tr_attr}}\n" 1477 "sysenter={cs=%04VR{sysenter_cs} eip=%08VR{sysenter_eip} esp=%08VR{sysenter_esp}}\n" 1478 "fcw=%04VR{fcw} fsw=%04VR{fsw} ftw=%04VR{ftw} mxcsr=%04VR{mxcsr} mxcsr_mask=%04VR{mxcsr_mask}\n" 1479 ); 1480 } 1481 if (RT_FAILURE(rc)) 1482 return DBGCCmdHlpVBoxError(pCmdHlp, rc, "DBGFR3RegPrintf failed"); 1483 char *pszRegs = strchr(szDisAndRegs, '\n'); 1484 *pszRegs++ = '\0'; 1485 rc = DBGCCmdHlpPrintf(pCmdHlp, "%s", pszRegs); 1486 1487 /* 1488 * Disassemble one instruction at cs:[r|e]ip. 1489 */ 1490 return pCmdHlp->pfnExec(pCmdHlp, "%s", szDisAndRegs); 1491 } 1594 1492 return dbgcCmdRegCommon(pCmd, pCmdHlp, pVM, paArgs, cArgs, pResult, ""); 1595 1493 } … … 1608 1506 static DECLCALLBACK(int) dbgcCmdRegHyper(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult) 1609 1507 { 1508 /* 1509 * Show all registers our selves. 1510 */ 1511 if (cArgs == 0) 1512 { 1513 PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); 1514 char szDisAndRegs[8192]; 1515 int rc; 1516 1517 if (pDbgc->fRegTerse) 1518 rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu | DBGFREG_HYPER_VMCPUID, szDisAndRegs, sizeof(szDisAndRegs), 1519 "u %VR{cs}:%VR{eip} L 0\n" 1520 ".eax=%08VR{eax} .ebx=%08VR{ebx} .ecx=%08VR{ecx} .edx=%08VR{edx} .esi=%08VR{esi} .edi=%08VR{edi}\n" 1521 ".eip=%08VR{eip} .esp=%08VR{esp} .ebp=%08VR{ebp} .%VRF{eflags}\n" 1522 ".cs=%04VR{cs} .ds=%04VR{ds} .es=%04VR{es} .fs=%04VR{fs} .gs=%04VR{gs} .ss=%04VR{ss} .eflags=%08VR{eflags}\n"); 1523 else 1524 rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu | DBGFREG_HYPER_VMCPUID, szDisAndRegs, sizeof(szDisAndRegs), 1525 "u %04VR{cs}:%08VR{eip} L 0\n" 1526 ".eax=%08VR{eax} .ebx=%08VR{ebx} .ecx=%08VR{ecx} .edx=%08VR{edx} .esi=%08VR{esi} .edi=%08VR{edi}\n" 1527 ".eip=%08VR{eip} .esp=%08VR{esp} .ebp=%08VR{ebp} .%VRF{eflags}\n" 1528 ".cs={%04VR{cs} base=%08VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} .dr0=%08VR{dr0} .dr1=%08VR{dr1}\n" 1529 ".ds={%04VR{ds} base=%08VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} .dr2=%08VR{dr2} .dr3=%08VR{dr3}\n" 1530 ".es={%04VR{es} base=%08VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} .dr6=%08VR{dr6} .dr6=%08VR{dr6}\n" 1531 ".fs={%04VR{fs} base=%08VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} .cr3=%016VR{cr3}\n" 1532 ".gs={%04VR{gs} base=%08VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}}\n" 1533 ".ss={%04VR{ss} base=%08VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}}\n" 1534 ".gdtr=%08VR{gdtr_base}:%04VR{gdtr_limit} .idtr=%08VR{idtr_base}:%04VR{idtr_limit} .eflags=%08VR{eflags}\n" 1535 ".ldtr={%04VR{ldtr} base=%08VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%04VR{ldtr_attr}}\n" 1536 ".tr ={%04VR{tr} base=%08VR{tr_base} limit=%08VR{tr_lim} flags=%04VR{tr_attr}}\n" 1537 ); 1538 if (RT_FAILURE(rc)) 1539 return DBGCCmdHlpVBoxError(pCmdHlp, rc, "DBGFR3RegPrintf failed"); 1540 char *pszRegs = strchr(szDisAndRegs, '\n'); 1541 *pszRegs++ = '\0'; 1542 rc = DBGCCmdHlpPrintf(pCmdHlp, "%s", pszRegs); 1543 1544 /* 1545 * Disassemble one instruction at cs:[r|e]ip. 1546 */ 1547 return pCmdHlp->pfnExec(pCmdHlp, "%s", szDisAndRegs); 1548 } 1610 1549 return dbgcCmdRegCommon(pCmd, pCmdHlp, pVM, paArgs, cArgs, pResult, "."); 1611 1550 } -
trunk/src/VBox/Debugger/testcase/tstDBGCStubs.cpp
r35490 r35614 210 210 return VERR_INTERNAL_ERROR; 211 211 } 212 VMMR3DECL(int) DBGFR3RegPrintf(PVM pVM, VMCPUID idCpu, char *pszBuf, size_t cbBuf, const char *pszFormat, ...) 213 { 214 return VERR_INTERNAL_ERROR; 215 } 212 216 213 217 VMMR3DECL(PDBGFADDRESS) DBGFR3AddrFromPhys(PVM pVM, PDBGFADDRESS pAddress, RTGCPHYS PhysAddr)
Note:
See TracChangeset
for help on using the changeset viewer.