VirtualBox

Changeset 35614 in vbox for trunk


Ignore:
Timestamp:
Jan 18, 2011 2:44:19 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
69511
Message:

Debugger: Use DBGFR3RegPrintf instead of accessing the CPUMCTX directly. Added rg64 and rg32.

Location:
trunk/src/VBox/Debugger
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp

    r35410 r35614  
    356356    { "r",          0,        2,        &g_aArgReg[0],      RT_ELEMENTS(g_aArgReg),        NULL,               0,       dbgcCmdReg,         "[reg [newval]]",       "Show or set register(s) - active reg set." },
    357357    { "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." },
    358360    { "rh",         0,        2,        &g_aArgReg[0],      RT_ELEMENTS(g_aArgReg),        NULL,               0,       dbgcCmdRegHyper,    "[reg [newval]]",       "Show or set register(s) - hypervisor reg set." },
    359361    { "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." },
    361363    { "sa",         2,       ~0,        &g_aArgSearchMemType[0], RT_ELEMENTS(g_aArgSearchMemType),  NULL,      0,       dbgcCmdSearchMemType,   "<range> <pattern>",    "Search memory for an ascii string." },
    362364    { "sb",         2,       ~0,        &g_aArgSearchMemType[0], RT_ELEMENTS(g_aArgSearchMemType),  NULL,      0,       dbgcCmdSearchMemType,   "<range> <pattern>",    "Search memory for one or more bytes." },
     
    13391341    PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp);
    13401342
    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 */
    15351344
    15361345    /*
     
    15811390
    15821391/**
    1583  * The 'rg' command.
     1392 * The 'rg', 'rg64' and 'rg32' commands.
    15841393 *
    15851394 * @returns VBox status.
     
    15921401static DECLCALLBACK(int) dbgcCmdRegGuest(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult)
    15931402{
     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    }
    15941492    return dbgcCmdRegCommon(pCmd, pCmdHlp, pVM, paArgs, cArgs, pResult, "");
    15951493}
     
    16081506static DECLCALLBACK(int) dbgcCmdRegHyper(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult)
    16091507{
     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    }
    16101549    return dbgcCmdRegCommon(pCmd, pCmdHlp, pVM, paArgs, cArgs, pResult, ".");
    16111550}
  • trunk/src/VBox/Debugger/testcase/tstDBGCStubs.cpp

    r35490 r35614  
    210210    return VERR_INTERNAL_ERROR;
    211211}
     212VMMR3DECL(int) DBGFR3RegPrintf(PVM pVM, VMCPUID idCpu, char *pszBuf, size_t cbBuf, const char *pszFormat, ...)
     213{
     214    return VERR_INTERNAL_ERROR;
     215}
    212216
    213217VMMR3DECL(PDBGFADDRESS) DBGFR3AddrFromPhys(PVM pVM, PDBGFADDRESS pAddress, RTGCPHYS PhysAddr)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette