int main(int argc, char **argv) { RTR3InitExe(argc, &argv, 0); int rcRet = 0; if (argc <= 1) { RTPrintf("usage: %s <module> [more modules]\n", argv[0]); return 1; } /* * Iterate the files. */ for (int argi = 1; argi < argc; argi++) { RTPrintf("tstLdr: TESTING '%s'...\n", argv[argi]); rcRet += testLdrOne(argv[argi]); } /* * Test result summary. */ if (!rcRet) RTPrintf("tstLdr: SUCCESS\n"); else RTPrintf("tstLdr: FAILURE - %d errors\n", rcRet); return !!rcRet; }
int main(int argc, char **argv) { RTR3InitExe(argc, &argv, 0); /* * Initialize IPRT and create the test. */ RTTEST hTest; int rc = RTTestInitAndCreate("tstAudioMixBuffer", &hTest); if (rc) return rc; RTTestBanner(hTest); rc = tstSingle(hTest); if (RT_SUCCESS(rc)) rc = tstParentChild(hTest); if (RT_SUCCESS(rc)) rc = tstConversion8(hTest); if (RT_SUCCESS(rc)) rc = tstConversion16(hTest); if (RT_SUCCESS(rc)) rc = tstVolume(hTest); /* * Summary */ return RTTestSummaryAndDestroy(hTest); }
int main(int argc, char **argv) { int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) return RTMsgInitFailure(rc); return RTPathRmCmd(argc, argv); }
/** * Main entry point. */ int main(int argc, char **argv, char **envp) { int rc = RTR3InitExe(argc, &argv, RTR3INIT_FLAGS_SUPLIB); if (RT_FAILURE(rc)) return RTMsgInitFailure(rc); return TrustedMain(argc, argv, envp); }
int main(int argc, char *argv[]) { int rc; RTR3InitExe(argc, &argv, 0); RTPrintf("tstVD-2: TESTING...\n"); rc = tstVDBackendInfo(); if (RT_FAILURE(rc)) { RTPrintf("tstVD-2: getting backend info test failed! rc=%Rrc\n", rc); g_cErrors++; } rc = VDShutdown(); if (RT_FAILURE(rc)) { RTPrintf("tstVD-2: unloading backends failed! rc=%Rrc\n", rc); g_cErrors++; } /* * Summary */ if (!g_cErrors) RTPrintf("tstVD-2: SUCCESS\n"); else RTPrintf("tstVD-2: FAILURE - %d errors\n", g_cErrors); return !!g_cErrors; }
static int tstRTCreateProcEx5Child(int argc, char **argv) { int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) return RTMsgInitFailure(rc); uint32_t cErrors = 0; /* Check that the OS thinks we're running as the user we're supposed to. */ char *pszUser; rc = RTProcQueryUsernameA(NIL_RTPROCESS, &pszUser); if (RT_SUCCESS(rc)) { #ifdef RT_OS_WINDOWS if (RTStrICmp(pszUser, argv[2]) != 0) #else if (RTStrCmp(pszUser, argv[2]) != 0) #endif { RTStrmPrintf(g_pStdErr, "child4: user name is '%s', expected '%s'\n", pszUser, argv[2]); cErrors++; } RTStrFree(pszUser); } else { RTStrmPrintf(g_pStdErr, "child4: RTProcQueryUsernameA failed: %Rrc\n", rc); cErrors++; } return cErrors == 0 ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE; }
int main( int argc, char **argv) { int rc = VINF_SUCCESS; char ach[2]; RTR3InitExe(argc, &argv, 0); RTPrintf("VirtualBox guest additions X11 seamless mode testcase\n"); if (0 == XInitThreads()) { RTPrintf("Failed to initialise X11 threading, exiting.\n"); exit(1); } /* Set an X11 error handler, so that we don't die when we get unavoidable errors. */ XSetErrorHandler(vboxClientXLibErrorHandler); RTPrintf("\nPress <Enter> to exit...\n"); RTSemEventCreate(&eventSem); /** Our instance of the seamless class. */ VBoxGuestSeamless seamless; LogRel(("Starting seamless Guest Additions...\n")); rc = seamless.init(); if (rc != VINF_SUCCESS) { RTPrintf("Failed to initialise seamless Additions, rc = %d\n", rc); } RTStrmGetLine(g_pStdIn, ach, sizeof(ach)); seamless.uninit(); return rc; }
int main(int argc, char **argv) { int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) return RTMsgInitFailure(rc); /* * Switch on the command. */ RTEXITCODE rcExit = RTEXITCODE_SYNTAX; if (argc < 2) rtDbgSymCacheUsage(argv[0], NULL); else if (!strcmp(argv[1], "add")) rcExit = rtDbgSymCacheCmdAdd(argv[0], argc - 2, argv + 2); else if ( !strcmp(argv[1], "-h") || !strcmp(argv[1], "-?") || !strcmp(argv[1], "--help")) rcExit = rtDbgSymCacheUsage(argv[0], NULL); else if ( !strcmp(argv[1], "-V") || !strcmp(argv[1], "--version")) rcExit = rtDbgSymCacheVersion(); else RTMsgError("Unknown command: '%s'", argv[1]); return rcExit; }
int main(int argc, char **argv) { int rc; RTR3InitExe(argc, &argv, 0); rc = SUPR3Init(NULL); if (RT_SUCCESS(rc)) { SUPPAGINGMODE enmMode = SUPR3GetPagingMode(); switch (enmMode) { case SUPPAGINGMODE_INVALID: RTPrintf("SUPPAGINGMODE_INVALID\n"); break; case SUPPAGINGMODE_32_BIT: RTPrintf("SUPPAGINGMODE_32_BIT\n"); break; case SUPPAGINGMODE_32_BIT_GLOBAL: RTPrintf("SUPPAGINGMODE_32_BIT_GLOBAL\n"); break; case SUPPAGINGMODE_PAE: RTPrintf("SUPPAGINGMODE_PAE\n"); break; case SUPPAGINGMODE_PAE_GLOBAL: RTPrintf("SUPPAGINGMODE_PAE_GLOBAL\n"); break; case SUPPAGINGMODE_PAE_NX: RTPrintf("SUPPAGINGMODE_PAE_NX\n"); break; case SUPPAGINGMODE_PAE_GLOBAL_NX: RTPrintf("SUPPAGINGMODE_PAE_GLOBAL_NX\n"); break; case SUPPAGINGMODE_AMD64: RTPrintf("SUPPAGINGMODE_AMD64\n"); break; case SUPPAGINGMODE_AMD64_GLOBAL: RTPrintf("SUPPAGINGMODE_AMD64_GLOBAL\n"); break; case SUPPAGINGMODE_AMD64_NX: RTPrintf("SUPPAGINGMODE_AMD64_NX\n"); break; case SUPPAGINGMODE_AMD64_GLOBAL_NX: RTPrintf("SUPPAGINGMODE_AMD64_GLOBAL_NX\n"); break; default: RTPrintf("Unknown mode %d\n", enmMode); rc = VERR_INTERNAL_ERROR; break; } int rc2 = SUPR3Term(false /*fForced*/); RTPrintf("SUPR3Term -> rc=%Rrc\n", rc2); } else RTPrintf("SUPR3Init -> rc=%Rrc\n", rc); return !RT_SUCCESS(rc); }
int main(int argc, char **argv) { /* * Initialize the runtime and VD. */ int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) { RTStrmPrintf(g_pStdErr, "VBoxFUSE: RTR3InitExe failed, rc=%Rrc\n", rc); return 1; } RTPrintf("VBoxFUSE: Hello...\n"); rc = VDInit(); if (RT_FAILURE(rc)) { RTStrmPrintf(g_pStdErr, "VBoxFUSE: VDInit failed, rc=%Rrc\n", rc); return 1; } /* * Initializes the globals and populate the file hierarchy. */ rc = vboxfuseDirCreate("/", NULL); if (RT_SUCCESS(rc)) rc = vboxfuseDirCreate("/FlattenedImages", NULL); if (RT_FAILURE(rc)) { RTStrmPrintf(g_pStdErr, "VBoxFUSE: vboxfuseDirCreate failed, rc=%Rrc\n", rc); return 1; } /* * Initialize the g_vboxfuseOps. (C++ sucks!) */ memset(&g_vboxfuseOps, 0, sizeof(g_vboxfuseOps)); g_vboxfuseOps.getattr = vboxfuseOp_getattr; g_vboxfuseOps.opendir = vboxfuseOp_opendir; g_vboxfuseOps.readdir = vboxfuseOp_readdir; g_vboxfuseOps.releasedir = vboxfuseOp_releasedir; g_vboxfuseOps.symlink = vboxfuseOp_symlink; g_vboxfuseOps.open = vboxfuseOp_open; g_vboxfuseOps.read = vboxfuseOp_read; g_vboxfuseOps.write = vboxfuseOp_write; g_vboxfuseOps.release = vboxfuseOp_release; /* * Hand control over to libfuse. */ #if 0 /** @todo multithreaded fun. */ #else rc = fuse_main(argc, argv, &g_vboxfuseOps, NULL); #endif RTPrintf("VBoxFUSE: fuse_main -> %d\n", rc); return rc; }
int main(int argc, char *argv[]) { RTR3InitExe(argc, &argv, 0); int rc; RTPrintf("tstVD: TESTING...\n"); /* * Clean up potential leftovers from previous unsuccessful runs. */ RTFileDelete("tmpVDCreate.vdi"); if (!RTDirExists("tmp")) { rc = RTDirCreate("tmp", RTFS_UNIX_IRWXU, 0); if (RT_FAILURE(rc)) { RTPrintf("tstVD: Failed to create 'tmp' directory! rc=%Rrc\n", rc); g_cErrors++; } } #ifdef VDI_TEST rc = tstVDCreateShareDelete("VDI", "tmpVDCreate.vdi", 10 * _1M, VD_IMAGE_FLAGS_FIXED); if (RT_FAILURE(rc)) { RTPrintf("tstVD: VDI shareable test failed! rc=%Rrc\n", rc); g_cErrors++; } #endif /* VDI_TEST */ /* * Clean up any leftovers. */ RTFileDelete("tmpVDCreate.vdi"); rc = VDShutdown(); if (RT_FAILURE(rc)) { RTPrintf("tstVD: unloading backends failed! rc=%Rrc\n", rc); g_cErrors++; } /* * Summary */ if (!g_cErrors) RTPrintf("tstVD: SUCCESS\n"); else RTPrintf("tstVD: FAILURE - %d errors\n", g_cErrors); return !!g_cErrors; }
int main(int argc, char *argv[]) { RTR3InitExe(argc, &argv, 0); int rc; VDSNAPTEST Test; RTPrintf("tstVDSnap: TESTING...\n"); rc = RTRandAdvCreateParkMiller(&g_hRand); if (RT_FAILURE(rc)) { RTPrintf("tstVDSnap: Creating RNG failed rc=%Rrc\n", rc); return 1; } RTRandAdvSeed(g_hRand, 0x12345678); Test.pcszBackend = "vmdk"; Test.pcszBaseImage = "tstVDSnapBase.vmdk"; Test.pcszDiffSuff = "vmdk"; Test.cIterations = 30; Test.cbTestPattern = 10 * _1M; Test.cDiskSegsMin = 10; Test.cDiskSegsMax = 50; Test.cDiffsMinBeforeMerge = 5; Test.uCreateDiffChance = 50; /* % */ Test.uChangeSegChance = 50; /* % */ Test.uAllocatedBlocks = 50; /* 50% allocated */ Test.fForward = true; tstVDOpenCreateWriteMerge(&Test); /* Same test with backwards merge */ Test.fForward = false; tstVDOpenCreateWriteMerge(&Test); rc = VDShutdown(); if (RT_FAILURE(rc)) { RTPrintf("tstVDSnap: unloading backends failed! rc=%Rrc\n", rc); g_cErrors++; } /* * Summary */ if (!g_cErrors) RTPrintf("tstVDSnap: SUCCESS\n"); else RTPrintf("tstVDSnap: FAILURE - %d errors\n", g_cErrors); RTRandAdvDestroy(g_hRand); return !!g_cErrors; }
int main(int argc, char **argv) { int rcRet = 0; /* error count. */ RTR3InitExe(argc, &argv, RTR3INIT_FLAGS_SUPLIB); /* * Doesn't work and I'm sick of rebooting the machine to try figure out * what the heck is going wrong. (Linux sucks at this) */ RTPrintf(TESTCASE ": This testcase hits a bunch of breakpoint assertions which\n" TESTCASE ": causes kernel panics on linux regardless of what\n" TESTCASE ": RTAssertDoBreakpoint returns. Only checked AMD-V on linux.\n"); /** @todo Make tstVMM-Hm to cause kernel panics. */ return 1; /* * Create empty VM. */ RTPrintf(TESTCASE ": Initializing...\n"); PVM pVM; PUVM pUVM; int rc = VMR3Create(1, NULL, NULL, NULL, tstVmmHmConfigConstructor, NULL, &pVM, &pUVM); if (RT_SUCCESS(rc)) { /* * Do testing. */ RTPrintf(TESTCASE ": Testing...\n"); rc = VMR3ReqCallWaitU(pUVM, VMCPUID_ANY, (PFNRT)VMMDoHmTest, 1, pVM); AssertRC(rc); STAMR3Dump(pUVM, "*"); /* * Cleanup. */ rc = VMR3Destroy(pUVM); if (RT_FAILURE(rc)) { RTPrintf(TESTCASE ": error: failed to destroy vm! rc=%d\n", rc); rcRet++; } VMR3ReleaseUVM(pUVM); } else { RTPrintf(TESTCASE ": fatal error: failed to create vm! rc=%d\n", rc); rcRet++; } return rcRet; }
int main(int argc, char **argv) { int rc; RTR3InitExe(argc, &argv, 0); rc = SUPR3Init(NULL); RTPrintf("tstInit: SUPR3Init -> rc=%Rrc\n", rc); if (!rc) { rc = SUPR3Term(false /*fForced*/); RTPrintf("tstInit: SUPR3Term -> rc=%Rrc\n", rc); } return rc; }
int main(int argc, char **argv) { int rcRet = 0; RTR3InitExe(argc, &argv, 0); /* * If no args, display usage. */ if (argc <= 1) { RTPrintf("Syntax: %s [so/dll [so/dll [..]]\n", argv[0]); return 1; } /* * Iterate the arguments and treat all of them as so/dll paths. */ for (int i = 1; i < argc; i++) { RTLDRMOD hLdrMod = (RTLDRMOD)0xbaadffaa; int rc = RTLdrLoad(argv[i], &hLdrMod); if (RT_SUCCESS(rc)) { RTPrintf("tstLdrLoad: %d - %s\n", i, argv[i]); rc = RTLdrClose(hLdrMod); if (RT_FAILURE(rc)) { RTPrintf("tstLdrLoad: rc=%Rrc RTLdrClose()\n", rc); rcRet++; } } else { RTPrintf("tstLdrLoad: rc=%Rrc RTLdrOpen('%s')\n", rc, argv[i]); rcRet++; } } /* * Summary. */ if (!rcRet) RTPrintf("tstLdrLoad: SUCCESS\n"); else RTPrintf("tstLdrLoad: FAILURE - %d errors\n", rcRet); return !!rcRet; }
int main(int argc, char **argv) { RTR3InitExe(argc, &argv, 0); if (argc == 2 && !strcmp(argv[1], "child")) return 42; RTPrintf("tstRTWait: spawning a child in a separate thread and waits for it in the main thread...\n"); RTTHREAD Thread; SPAWNERARGS Args = { NIL_RTPROCESS, argv[0] }; int rc = RTThreadCreate(&Thread, SpawnerThread, &Args, 0, RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "SPAWNER"); if (RT_SUCCESS(rc)) { /* Wait for it to complete. */ int rc2; rc = RTThreadWait(Thread, RT_INDEFINITE_WAIT, &rc2); if (RT_SUCCESS(rc)) rc = rc2; if (RT_SUCCESS(rc)) { /* wait for the process to complete */ RTPROCSTATUS Status; rc = RTProcWait(Args.Process, 0, &Status); if (RT_SUCCESS(rc)) { if ( Status.enmReason == RTPROCEXITREASON_NORMAL && Status.iStatus == 42) RTPrintf("tstRTWait: Success!\n"); else { rc = VERR_GENERAL_FAILURE; if (Status.enmReason != RTPROCEXITREASON_NORMAL) RTPrintf("tstRTWait: Expected exit reason RTPROCEXITREASON_NORMAL, got %d.\n", Status.enmReason); else RTPrintf("tstRTWait: Expected exit status 42, got %d.\n", Status.iStatus); } } else RTPrintf("tstRTWait: RTProcWait failed with rc=%Rrc!\n", rc); } else RTPrintf("tstRTWait: RTThreadWait or SpawnerThread failed with rc=%Rrc!\n", rc); } else RTPrintf("tstRTWait: RTThreadCreate failed with rc=%Rrc!\n", rc); return RT_SUCCESS(rc) ? 0 : 1; }
/** * Entry point. */ extern "C" DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) { RT_NOREF1(envp); int rcRet = 0; /* error count. */ RTR3InitExe(argc, &argv, RTR3INIT_FLAGS_SUPLIB); /* * Create empty VM. */ PVM pVM; PUVM pUVM; int rc = VMR3Create(1, NULL, NULL, NULL, NULL, NULL, &pVM, &pUVM); if (RT_SUCCESS(rc)) { /* * Do testing. */ rc = VMR3ReqCallVoidWaitU(pUVM, VMCPUID_ANY, (PFNRT)doit, 1, pVM); AssertRC(rc); STAMR3Dump(pUVM, "*"); /* * Cleanup. */ rc = VMR3PowerOff(pUVM); if (!RT_SUCCESS(rc)) { RTPrintf(TESTCASE ": error: failed to power off vm! rc=%Rrc\n", rc); rcRet++; } rc = VMR3Destroy(pUVM); if (!RT_SUCCESS(rc)) { RTPrintf(TESTCASE ": error: failed to destroy vm! rc=%Rrc\n", rc); rcRet++; } VMR3ReleaseUVM(pUVM); } else { RTPrintf(TESTCASE ": fatal error: failed to create vm! rc=%Rrc\n", rc); rcRet++; } return rcRet; }
int main(int argc, char **argv) { int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) return RTMsgInitFailure(rc); rc = ConnectToSmc(); if (RT_SUCCESS(rc)) { /* * Dump the keys. */ uint32_t cKeys; rc = GetKeyCount(&cKeys); if (RT_SUCCESS(rc)) RTPrintf("#Keys=%u\n", cKeys); for (uint32_t iKey = 0; iKey < cKeys; iKey++) { SMCPARAM Key; rc = GetKeyByIndex(iKey, &Key); if (RT_SUCCESS(rc)) { RTPrintf("%#06x: ", iKey); DisplayKey(&Key); } } /* * Known keys that doesn't make it into the enumeration. */ DisplayKeyByName('OSK0'); DisplayKeyByName('OSK1'); DisplayKeyByName('OSK2'); /* Negative checks, sometimes maybe. */ DisplayKeyByName('$Num'); DisplayKeyByName('MSTf'); DisplayKeyByName('MSDS'); DisplayKeyByName('LSOF'); } DisconnectFromSmc(); if (RT_SUCCESS(rc)) return RTEXITCODE_SUCCESS; return RTEXITCODE_FAILURE; }
int main(int argc, char **argv) { int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) { RTPrintf("tstSemMutex: RTR3InitExe failed (rc=%Rrc)\n", rc); return 1; } RTPrintf("tstSemMutex: TESTING...\n"); if (argc == 1) { /* threads, seconds, yield, quiet */ Test1( 1, 1, true, false); Test1( 2, 1, true, false); Test1( 10, 1, true, false); Test1( 10, 10, false, false); RTPrintf("tstSemMutex: benchmarking...\n"); for (unsigned cThreads = 1; cThreads < 32; cThreads++) Test1(cThreads, 2, false, true); /** @todo add a testcase where some stuff times out. */ } else { /* threads, seconds, yield, quiet */ RTPrintf("tstSemMutex: benchmarking...\n"); Test1( 1, 3, false, true); Test1( 1, 3, false, true); Test1( 1, 3, false, true); Test1( 2, 3, false, true); Test1( 2, 3, false, true); Test1( 2, 3, false, true); Test1( 3, 3, false, true); Test1( 3, 3, false, true); Test1( 3, 3, false, true); } if (!g_cErrors) RTPrintf("tstSemMutex: SUCCESS\n"); else RTPrintf("tstSemMutex: FAILURE - %u errors\n", g_cErrors); return g_cErrors != 0; }
/** * Main entry point. */ int main(int argc, char **argv) { /* * Before we do *anything*, we initialize the runtime. */ #if defined (RT_OS_WINDOWS) if (IsWow64()) { RTPrintf("Your are runing 32bit VirtualMonitor on 64bit windows\n"); RTPrintf("Please Download 64bit version of VirtualMonitor\n"); return -1; } #endif int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) return FatalError("RTR3InitExe failed rc=%Rrc\n", rc); return TrustedMain(argc, argv, NULL); }
int main(int argc, char **argv) { int rcRet = 0; int rcRet2; int rc; unsigned cMatch; RTR3InitExe(argc, &argv, 0); const char *pszTestDir = "."; char *pszFilter1 = RTPathJoinA(pszTestDir, "xyxzxq*"); if (!pszFilter1) { RTPrintf("tstDir-3: cannot create non-match filter!\n"); return 1; } char *pszFilter2 = RTPathJoinA(pszTestDir, "*"); if (!pszFilter2) { RTPrintf("tstDir-3: cannot create match filter!\n"); return 1; } rcRet2 = tstDirOpenFiltered(pszFilter1, &cMatch, &rc); if (rcRet2) rcRet = rcRet2; if (RT_FAILURE(rc)) RTPrintf("tstDir-3: filter '%s' failed! rc=%Rrc\n", pszFilter1, rc); if (cMatch) RTPrintf("tstDir-3: filter '%s' gave wrong result count! cMatch=%u\n", pszFilter1, cMatch); rcRet2 = tstDirOpenFiltered(pszFilter2, &cMatch, &rc); if (rcRet2) rcRet = rcRet2; if (RT_FAILURE(rc)) RTPrintf("tstDir-3: filter '%s' failed! rc=%Rrc\n", pszFilter2, rc); if (!cMatch) RTPrintf("tstDir-3: filter '%s' gave wrong result count! cMatch=%u\n", pszFilter2, cMatch); if (!rcRet) RTPrintf("tstDir-3: OK\n"); return rcRet; }
int main(int argc, char **argv) { int cErrors = 0; RTR3InitExe(argc, &argv, 0); /* * Sanity check. */ int rc = DisasmTest1(); if (rc) { RTPrintf("tstLdr-4: FATAL ERROR - DisasmTest1 is buggy: rc=%#x\n", rc); return 1; } /* * Execute the test. */ char szPath[RTPATH_MAX]; rc = RTPathExecDir(szPath, sizeof(szPath) - sizeof("/tstLdrObjR0.r0")); if (RT_SUCCESS(rc)) { strcat(szPath, "/tstLdrObjR0.r0"); RTPrintf("tstLdr-4: TESTING '%s'...\n", szPath); cErrors += testLdrOne(szPath); } else { RTPrintf("tstLdr-4: RTPathExecDir -> %Rrc\n", rc); cErrors++; } /* * Test result summary. */ if (!cErrors) RTPrintf("tstLdr-4: SUCCESS\n"); else RTPrintf("tstLdr-4: FAILURE - %d errors\n", cErrors); return !!cErrors; }
int main(int argc, char **argv) { RTR3InitExe(argc, &argv, RTR3INIT_FLAGS_SUPLIB); if (argc <= 1) { RTPrintf("tstTime-3: usage: tstTime-3 <seconds> [seconds2 [..]]\n"); return 1; } RTPrintf("tstTime-3: Testing difference between RTTimeNanoTS() and OS time...\n"); for (int i = 1; i < argc; i++) { uint64_t cSeconds = 0; int rc = RTStrToUInt64Ex(argv[i], NULL, 0, &cSeconds); if (RT_FAILURE(rc)) { RTPrintf("tstTime-3: Invalid argument %d: %s\n", i, argv[i]); return 1; } RTPrintf("tstTime-3: %d - %RU64 seconds period...\n", i, cSeconds); RTTimeNanoTS(); OSNanoTS(); RTThreadSleep(1); uint64_t u64RTStartTS = RTTimeNanoTS(); uint64_t u64OSStartTS = OSNanoTS(); RTThreadSleep(cSeconds * 1000); uint64_t u64RTElapsedTS = RTTimeNanoTS(); uint64_t u64OSElapsedTS = OSNanoTS(); u64RTElapsedTS -= u64RTStartTS; u64OSElapsedTS -= u64OSStartTS; RTPrintf("tstTime-3: %d - RT: %16RU64 ns\n", i, u64RTElapsedTS); RTPrintf("tstTime-3: %d - OS: %16RU64 ns\n", i, u64OSElapsedTS); RTPrintf("tstTime-3: %d - diff: %16RI64 ns\n", i, u64RTElapsedTS - u64OSElapsedTS); } return 0; }
int __cdecl main(int argc, char **argv) { if (RTR3InitExe(argc, &argv, 0) != VINF_SUCCESS) { printf("Could not init IPRT!\n"); return 1; } VBoxDrvCfgLoggerSet(vboxUsbLog, NULL); VBoxDrvCfgPanicSet(vboxUsbPanic, NULL); RTPrintf("USB installation\n"); int rc = usblibOsCreateService(); if (RT_SUCCESS(rc)) { LPWSTR lpszFilePart; WCHAR szFullPath[MAX_PATH]; DWORD len; len = GetFullPathNameW(L".\\VBoxUSB.inf", RT_ELEMENTS(szFullPath), szFullPath, &lpszFilePart); Assert(len); HRESULT hr = VBoxDrvCfgInfInstall(szFullPath); if (hr == S_OK) { RTPrintf("Installation successful.\n"); } else { rc = -1; } } if (RT_SUCCESS(rc)) rc = 0; /** @todo RTR3Term(); */ return rc; }
int main(int argc, char **argv) { int rcRet = 0; /* error count. */ RTR3InitExe(argc, &argv, RTR3INIT_FLAGS_SUPLIB); /* * Create empty VM. */ PVM pVM; int rc = VMR3Create(1, NULL, NULL, NULL, NULL, NULL, &pVM); if (RT_SUCCESS(rc)) { /* * Do testing. */ rc = VMR3ReqCallVoidWait(pVM, VMCPUID_ANY, (PFNRT)doit, 1, pVM); AssertRC(rc); STAMR3Dump(pVM, "*"); /* * Cleanup. */ rc = VMR3Destroy(pVM); if (!RT_SUCCESS(rc)) { RTPrintf(TESTCASE ": error: failed to destroy vm! rc=%d\n", rc); rcRet++; } } else { RTPrintf(TESTCASE ": fatal error: failed to create vm! rc=%d\n", rc); rcRet++; } return rcRet; }
int main(int argc, char **argv) { RTR3InitExe(argc, &argv, 0); /* * Parse args */ static const RTGETOPTDEF g_aOptions[] = { { "--iterations", 'i', RTGETOPT_REQ_INT32 }, { "--hex", 'h', RTGETOPT_REQ_NOTHING }, { "--decimal", 'd', RTGETOPT_REQ_NOTHING }, { "--spin", 's', RTGETOPT_REQ_NOTHING } }; uint32_t cIterations = 40; bool fHex = true; bool fSpin = false; int ch; RTGETOPTUNION ValueUnion; RTGETOPTSTATE GetState; RTGetOptInit(&GetState, argc, argv, g_aOptions, RT_ELEMENTS(g_aOptions), 1, RTGETOPTINIT_FLAGS_NO_STD_OPTS); while ((ch = RTGetOpt(&GetState, &ValueUnion))) { switch (ch) { case 'i': cIterations = ValueUnion.u32; break; case 'd': fHex = false; break; case 'h': fHex = true; break; case 's': fSpin = true; break; default: return RTGetOptPrintError(ch, &ValueUnion); } } /* * Init */ PSUPDRVSESSION pSession = NIL_RTR0PTR; int rc = SUPR3Init(&pSession); if (RT_SUCCESS(rc)) { if (g_pSUPGlobalInfoPage) { RTPrintf("tstGIP-2: u32UpdateHz=%RU32 u32UpdateIntervalNS=%RU32 u64NanoTSLastUpdateHz=%RX64 u32Mode=%d (%s) u32Version=%#x\n", g_pSUPGlobalInfoPage->u32UpdateHz, g_pSUPGlobalInfoPage->u32UpdateIntervalNS, g_pSUPGlobalInfoPage->u64NanoTSLastUpdateHz, g_pSUPGlobalInfoPage->u32Mode, g_pSUPGlobalInfoPage->u32Mode == SUPGIPMODE_SYNC_TSC ? "sync" : g_pSUPGlobalInfoPage->u32Mode == SUPGIPMODE_ASYNC_TSC ? "async" : "???", g_pSUPGlobalInfoPage->u32Version); RTPrintf(fHex ? "tstGIP-2: it: u64NanoTS delta u64TSC UpIntTSC H TransId CpuHz TSC Interval History...\n" : "tstGIP-2: it: u64NanoTS delta u64TSC UpIntTSC H TransId CpuHz TSC Interval History...\n"); static SUPGIPCPU s_aaCPUs[2][RT_ELEMENTS(g_pSUPGlobalInfoPage->aCPUs)]; for (uint32_t i = 0; i < cIterations; i++) { /* copy the data */ memcpy(&s_aaCPUs[i & 1][0], &g_pSUPGlobalInfoPage->aCPUs[0], sizeof(g_pSUPGlobalInfoPage->aCPUs)); /* display it & find something to spin on. */ uint32_t u32TransactionId = 0; uint32_t volatile *pu32TransactionId = NULL; for (unsigned iCpu = 0; iCpu < RT_ELEMENTS(g_pSUPGlobalInfoPage->aCPUs); iCpu++) if ( g_pSUPGlobalInfoPage->aCPUs[iCpu].u64CpuHz > 0 && g_pSUPGlobalInfoPage->aCPUs[iCpu].u64CpuHz != _4G + 1) { PSUPGIPCPU pPrevCpu = &s_aaCPUs[!(i & 1)][iCpu]; PSUPGIPCPU pCpu = &s_aaCPUs[i & 1][iCpu]; RTPrintf(fHex ? "tstGIP-2: %4d/%d: %016llx %09llx %016llx %08x %d %08x %15llu %08x %08x %08x %08x %08x %08x %08x %08x (%d)\n" : "tstGIP-2: %4d/%d: %016llu %09llu %016llu %010u %d %010u %15llu %08x %08x %08x %08x %08x %08x %08x %08x (%d)\n", i, iCpu, pCpu->u64NanoTS, i ? pCpu->u64NanoTS - pPrevCpu->u64NanoTS : 0, pCpu->u64TSC, pCpu->u32UpdateIntervalTSC, pCpu->iTSCHistoryHead, pCpu->u32TransactionId, pCpu->u64CpuHz, pCpu->au32TSCHistory[0], pCpu->au32TSCHistory[1], pCpu->au32TSCHistory[2], pCpu->au32TSCHistory[3], pCpu->au32TSCHistory[4], pCpu->au32TSCHistory[5], pCpu->au32TSCHistory[6], pCpu->au32TSCHistory[7], pCpu->cErrors); if (!pu32TransactionId) { pu32TransactionId = &g_pSUPGlobalInfoPage->aCPUs[iCpu].u32TransactionId; u32TransactionId = pCpu->u32TransactionId; } } /* wait a bit / spin */ if (!fSpin) RTThreadSleep(9); else while (u32TransactionId == *pu32TransactionId) /* nop */; } } else { RTPrintf("tstGIP-2: g_pSUPGlobalInfoPage is NULL\n"); rc = -1; } SUPR3Term(false /*fForced*/); } else RTPrintf("tstGIP-2: SUPR3Init failed: %Rrc\n", rc); return !!rc; }
int main(int argc, char **argv, char **envp) { /* Initialize VBox Runtime. * Initialize the SUPLib as well only if we are really about to start a VM. * Don't do this if we are only starting the selector window. */ bool fInitSUPLib = false; #ifdef Q_WS_X11 if (!VBoxXInitThreads()) return 1; #endif for (int i = 1; i < argc; ++i) { /* NOTE: the check here must match the corresponding check for the * options to start a VM in hardenedmain.cpp and VBoxGlobal.cpp exactly, * otherwise there will be weird error messages. */ if ( !::strcmp(argv[i], "--startvm") || !::strcmp(argv[i], "-startvm")) { fInitSUPLib = true; break; } } int rc = RTR3InitExe(argc, &argv, fInitSUPLib ? RTR3INIT_FLAGS_SUPLIB : 0); /* Initialization failed: */ if (RT_FAILURE(rc)) { /* We have to create QApplication anyway * just to show the only one error-message: */ QApplication a(argc, &argv[0]); #ifdef Q_OS_SOLARIS /* Use plastique look&feel for Solaris instead of the default motif (Qt 4.7.x): */ QApplication::setStyle(new QPlastiqueStyle); #endif /* Q_OS_SOLARIS */ /* Prepare the error-message: */ QString strTitle = QApplication::tr("VirtualBox - Runtime Error"); QString strText = "<html>"; switch (rc) { case VERR_VM_DRIVER_NOT_INSTALLED: case VERR_VM_DRIVER_LOAD_ERROR: strText += QApplication::tr("<b>Cannot access the kernel driver!</b><br/><br/>"); # ifdef RT_OS_LINUX strText += g_QStrHintLinuxNoDriver; # else /* RT_OS_LINUX */ strText += g_QStrHintOtherNoDriver; # endif /* !RT_OS_LINUX */ break; # ifdef RT_OS_LINUX case VERR_NO_MEMORY: strText += g_QStrHintLinuxNoMemory; break; # endif /* RT_OS_LINUX */ case VERR_VM_DRIVER_NOT_ACCESSIBLE: strText += QApplication::tr("Kernel driver not accessible"); break; case VERR_VM_DRIVER_VERSION_MISMATCH: # ifdef RT_OS_LINUX strText += g_QStrHintLinuxWrongDriverVersion; # else /* RT_OS_LINUX */ strText += g_QStrHintOtherWrongDriverVersion; # endif /* !RT_OS_LINUX */ break; default: strText += QApplication::tr("Unknown error %2 during initialization of the Runtime").arg(rc); break; } strText += "</html>"; /* Show the error-message: */ QMessageBox::critical(0 /* parent */, strTitle, strText, QMessageBox::Abort /* 1st button */, 0 /* 2nd button */); /* Default error-result: */ return 1; } /* Actual main function: */ return TrustedMain(argc, argv, envp); }
int main(int argc, char **argv) { int rcRet = 0; RTR3InitExe(argc, &argv, 0); /* * Iterate arguments. */ bool fLong = false; bool fShortName = false; for (int i = 1; i < argc; i++) { if (argv[i][0] == '-') { for (int j = 1; argv[i][j]; j++) { switch (argv[i][j]) { case 'l': fLong = true; break; case 's': fShortName = true; break; default: RTPrintf("Unknown option '%c' ignored!\n", argv[i][j]); break; } } } else { /* open */ PRTDIR pDir; int rc = RTDirOpen(&pDir, argv[i]); if (RT_SUCCESS(rc)) { /* list */ if (!fLong) { for (;;) { RTDIRENTRY DirEntry; rc = RTDirRead(pDir, &DirEntry, NULL); if (RT_FAILURE(rc)) break; switch (DirEntry.enmType) { case RTDIRENTRYTYPE_UNKNOWN: RTPrintf("u"); break; case RTDIRENTRYTYPE_FIFO: RTPrintf("f"); break; case RTDIRENTRYTYPE_DEV_CHAR: RTPrintf("c"); break; case RTDIRENTRYTYPE_DIRECTORY: RTPrintf("d"); break; case RTDIRENTRYTYPE_DEV_BLOCK: RTPrintf("b"); break; case RTDIRENTRYTYPE_FILE: RTPrintf("-"); break; case RTDIRENTRYTYPE_SYMLINK: RTPrintf("l"); break; case RTDIRENTRYTYPE_SOCKET: RTPrintf("s"); break; case RTDIRENTRYTYPE_WHITEOUT: RTPrintf("w"); break; default: rcRet = 1; RTPrintf("?"); break; } RTPrintf(" %#18llx %3d %s\n", (uint64_t)DirEntry.INodeId, DirEntry.cbName, DirEntry.szName); } } else { for (;;) { RTDIRENTRYEX DirEntry; rc = RTDirReadEx(pDir, &DirEntry, NULL, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); if (RT_FAILURE(rc)) break; RTFMODE fMode = DirEntry.Info.Attr.fMode; switch (fMode & RTFS_TYPE_MASK) { case RTFS_TYPE_FIFO: RTPrintf("f"); break; case RTFS_TYPE_DEV_CHAR: RTPrintf("c"); break; case RTFS_TYPE_DIRECTORY: RTPrintf("d"); break; case RTFS_TYPE_DEV_BLOCK: RTPrintf("b"); break; case RTFS_TYPE_FILE: RTPrintf("-"); break; case RTFS_TYPE_SYMLINK: RTPrintf("l"); break; case RTFS_TYPE_SOCKET: RTPrintf("s"); break; case RTFS_TYPE_WHITEOUT: RTPrintf("w"); break; default: rcRet = 1; RTPrintf("?"); break; } /** @todo sticy bits++ */ RTPrintf("%c%c%c", fMode & RTFS_UNIX_IRUSR ? 'r' : '-', fMode & RTFS_UNIX_IWUSR ? 'w' : '-', fMode & RTFS_UNIX_IXUSR ? 'x' : '-'); RTPrintf("%c%c%c", fMode & RTFS_UNIX_IRGRP ? 'r' : '-', fMode & RTFS_UNIX_IWGRP ? 'w' : '-', fMode & RTFS_UNIX_IXGRP ? 'x' : '-'); RTPrintf("%c%c%c", fMode & RTFS_UNIX_IROTH ? 'r' : '-', fMode & RTFS_UNIX_IWOTH ? 'w' : '-', fMode & RTFS_UNIX_IXOTH ? 'x' : '-'); RTPrintf(" %c%c%c%c%c%c%c%c%c%c%c%c%c%c", fMode & RTFS_DOS_READONLY ? 'R' : '-', fMode & RTFS_DOS_HIDDEN ? 'H' : '-', fMode & RTFS_DOS_SYSTEM ? 'S' : '-', fMode & RTFS_DOS_DIRECTORY ? 'D' : '-', fMode & RTFS_DOS_ARCHIVED ? 'A' : '-', fMode & RTFS_DOS_NT_DEVICE ? 'd' : '-', fMode & RTFS_DOS_NT_NORMAL ? 'N' : '-', fMode & RTFS_DOS_NT_TEMPORARY ? 'T' : '-', fMode & RTFS_DOS_NT_SPARSE_FILE ? 'P' : '-', fMode & RTFS_DOS_NT_REPARSE_POINT ? 'J' : '-', fMode & RTFS_DOS_NT_COMPRESSED ? 'C' : '-', fMode & RTFS_DOS_NT_OFFLINE ? 'O' : '-', fMode & RTFS_DOS_NT_NOT_CONTENT_INDEXED ? 'I' : '-', fMode & RTFS_DOS_NT_ENCRYPTED ? 'E' : '-'); RTPrintf(" %d %4d %4d %10lld %10lld %#llx %#llx %#llx %#llx", DirEntry.Info.Attr.u.Unix.cHardlinks, DirEntry.Info.Attr.u.Unix.uid, DirEntry.Info.Attr.u.Unix.gid, DirEntry.Info.cbObject, DirEntry.Info.cbAllocated, DirEntry.Info.BirthTime, DirEntry.Info.ChangeTime, DirEntry.Info.ModificationTime, DirEntry.Info.AccessTime); if (fShortName && DirEntry.cwcShortName) RTPrintf(" %2d %ls\n", DirEntry.cwcShortName, DirEntry.wszShortName); else RTPrintf(" %2d %s\n", DirEntry.cbName, DirEntry.szName); if (rc != VINF_SUCCESS) RTPrintf("^^ %Rrc\n", rc); } } if (rc != VERR_NO_MORE_FILES) { RTPrintf("tstDir: Enumeration failed! rc=%Rrc\n", rc); rcRet = 1; } /* close up */ rc = RTDirClose(pDir); if (RT_FAILURE(rc)) { RTPrintf("tstDir: Failed to close dir! rc=%Rrc\n", rc); rcRet = 1; } } else { RTPrintf("tstDir: Failed to open '%s', rc=%Rrc\n", argv[i], rc); rcRet = 1; } } } return rcRet; }
int main(int argc, char **argv) { int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) return RTMsgInitFailure(rc); /* * Create a HTTP client instance. */ RTHTTP hHttp; rc = RTHttpCreate(&hHttp); if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTHttpCreate failed: %Rrc", rc); /* * Parse arguments. */ static const RTGETOPTDEF s_aOptions[] = { { "--output", 'o', RTGETOPT_REQ_STRING }, { "--quiet", 'q', RTGETOPT_REQ_NOTHING }, { "--verbose", 'v', RTGETOPT_REQ_NOTHING }, }; RTEXITCODE rcExit = RTEXITCODE_SUCCESS; const char *pszOutput = NULL; unsigned uVerbosityLevel = 1; RTGETOPTUNION ValueUnion; RTGETOPTSTATE GetState; RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, RTGETOPTINIT_FLAGS_OPTS_FIRST); while ((rc = RTGetOpt(&GetState, &ValueUnion))) { switch (rc) { case 'o': pszOutput = ValueUnion.psz; break; case 'q': uVerbosityLevel--; break; case 'v': uVerbosityLevel++; break; case 'h': RTPrintf("Usage: %s [options] URL0 [URL1 [...]]\n" "\n" "Options:\n" " -o,--output=file\n" " Output file. If not given, the file is displayed on stdout.\n" " -q, --quiet\n" " -v, --verbose\n" " Controls the verbosity level.\n" " -h, -?, --help\n" " Display this help text and exit successfully.\n" " -V, --version\n" " Display the revision and exit successfully.\n" , RTPathFilename(argv[0])); return RTEXITCODE_SUCCESS; case 'V': RTPrintf("$Revision: 102641 $\n"); return RTEXITCODE_SUCCESS; case VINF_GETOPT_NOT_OPTION: { int rcHttp; if (pszOutput && strcmp("-", pszOutput)) { if (uVerbosityLevel > 0) RTStrmPrintf(g_pStdErr, "Fetching '%s' into '%s'...\n", ValueUnion.psz, pszOutput); rcHttp = RTHttpGetFile(hHttp, ValueUnion.psz, pszOutput); } else { if (uVerbosityLevel > 0) RTStrmPrintf(g_pStdErr, "Fetching '%s'...\n", ValueUnion.psz); void *pvResp; size_t cbResp; rcHttp = RTHttpGetBinary(hHttp, ValueUnion.psz, &pvResp, &cbResp); if (RT_SUCCESS(rcHttp)) { RTVFSIOSTREAM hVfsIos; rc = RTVfsIoStrmFromStdHandle(RTHANDLESTD_OUTPUT, 0, true /*fLeaveOpen*/, &hVfsIos); if (RT_SUCCESS(rc)) { rc = RTVfsIoStrmWrite(hVfsIos, pvResp, cbResp, true /*fBlocking*/, NULL); if (RT_FAILURE(rc)) rcExit = RTMsgErrorExit(RTEXITCODE_FAILURE, "Error writing to stdout: %Rrc", rc); RTVfsIoStrmRelease(hVfsIos); } else rcExit = RTMsgErrorExit(RTEXITCODE_FAILURE, "Error opening stdout: %Rrc", rc); RTHttpFreeResponse(pvResp); } } if (RT_FAILURE(rcHttp)) rcExit = RTMsgErrorExit(RTEXITCODE_FAILURE, "Error %Rrc getting '%s'", rcHttp, ValueUnion.psz); break; } default: return RTGetOptPrintError(rc, &ValueUnion); } } return rcExit; }
int main(int argc, char **argv) { int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) return RTMsgInitFailure(rc); /* * Create an empty address space that we can load modules and stuff into * as we parse the parameters. */ RTDBGAS hDbgAs; rc = RTDbgAsCreate(&hDbgAs, 0, RTUINTPTR_MAX, ""); if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTDBgAsCreate -> %Rrc", rc); /* * Create a debugging configuration instance to work with so that we can * make use of (i.e. test) path searching and such. */ RTDBGCFG hDbgCfg; rc = RTDbgCfgCreate(&hDbgCfg, "IPRT", true /*fNativePaths*/); if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTDbgCfgCreate -> %Rrc", rc); /* * Parse arguments. */ static const RTGETOPTDEF s_aOptions[] = { { "--input", 'i', RTGETOPT_REQ_STRING }, { "--local-file", 'l', RTGETOPT_REQ_NOTHING }, { "--cache-file", 'c', RTGETOPT_REQ_NOTHING }, { "--pe-image", 'p', RTGETOPT_REQ_NOTHING }, { "--verbose", 'v', RTGETOPT_REQ_NOTHING }, { "--x86", '8', RTGETOPT_REQ_NOTHING }, { "--amd64", '6', RTGETOPT_REQ_NOTHING }, { "--whatever", '*', RTGETOPT_REQ_NOTHING }, }; PRTSTREAM pInput = g_pStdIn; PRTSTREAM pOutput = g_pStdOut; unsigned cVerbosityLevel = 0; enum { kOpenMethod_FromImage, kOpenMethod_FromPeImage } enmOpenMethod = kOpenMethod_FromImage; bool fCacheFile = false; RTLDRARCH enmArch = RTLDRARCH_WHATEVER; RTGETOPTUNION ValueUnion; RTGETOPTSTATE GetState; RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0); while ((rc = RTGetOpt(&GetState, &ValueUnion))) { switch (rc) { case 'i': rc = RTStrmOpen(ValueUnion.psz, "r", &pInput); if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed to open '%s' for reading: %Rrc", ValueUnion.psz, rc); break; case 'c': fCacheFile = true; break; case 'l': fCacheFile = false; break; case 'p': enmOpenMethod = kOpenMethod_FromPeImage; break; case 'v': cVerbosityLevel++; break; case '8': enmArch = RTLDRARCH_X86_32; break; case '6': enmArch = RTLDRARCH_AMD64; break; case '*': enmArch = RTLDRARCH_WHATEVER; break; case 'h': RTPrintf("Usage: %s [options] <module> <address> [<module> <address> [..]]\n" "\n" "Options:\n" " -i,--input=file\n" " Specify a input file instead of standard input.\n" " --pe-image\n" " Use RTDbgModCreateFromPeImage to open the file." " -v, --verbose\n" " Display the address space before doing the filtering.\n" " --amd64,--x86,--whatever\n" " Selects the desired architecture.\n" " -h, -?, --help\n" " Display this help text and exit successfully.\n" " -V, --version\n" " Display the revision and exit successfully.\n" , RTPathFilename(argv[0])); return RTEXITCODE_SUCCESS; case 'V': RTPrintf("$Revision$\n"); return RTEXITCODE_SUCCESS; case VINF_GETOPT_NOT_OPTION: { /* <module> <address> */ const char *pszModule = ValueUnion.psz; rc = RTGetOptFetchValue(&GetState, &ValueUnion, RTGETOPT_REQ_UINT64 | RTGETOPT_FLAG_HEX); if (RT_FAILURE(rc)) return RTGetOptPrintError(rc, &ValueUnion); uint64_t u64Address = ValueUnion.u64; uint32_t cbImage = 0; uint32_t uTimestamp = 0; if (fCacheFile) { rc = RTGetOptFetchValue(&GetState, &ValueUnion, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_HEX); if (RT_FAILURE(rc)) return RTGetOptPrintError(rc, &ValueUnion); cbImage = ValueUnion.u32; rc = RTGetOptFetchValue(&GetState, &ValueUnion, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_HEX); if (RT_FAILURE(rc)) return RTGetOptPrintError(rc, &ValueUnion); uTimestamp = ValueUnion.u32; } RTDBGMOD hMod; if (enmOpenMethod == kOpenMethod_FromImage) rc = RTDbgModCreateFromImage(&hMod, pszModule, NULL, enmArch, hDbgCfg); else rc = RTDbgModCreateFromPeImage(&hMod, pszModule, NULL, NIL_RTLDRMOD, cbImage, uTimestamp, hDbgCfg); if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTDbgModCreateFromImage(,%s,,) -> %Rrc", pszModule, rc); rc = RTDbgAsModuleLink(hDbgAs, hMod, u64Address, 0 /* fFlags */); if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTDbgAsModuleLink(,%s,%llx,) -> %Rrc", pszModule, u64Address, rc); break; } default: return RTGetOptPrintError(rc, &ValueUnion); } } /* * Display the address space. */ if (cVerbosityLevel) { RTPrintf("*** Address Space Dump ***\n"); uint32_t cModules = RTDbgAsModuleCount(hDbgAs); for (uint32_t iModule = 0; iModule < cModules; iModule++) { RTDBGMOD hDbgMod = RTDbgAsModuleByIndex(hDbgAs, iModule); RTPrintf("Module #%u: %s\n", iModule, RTDbgModName(hDbgMod)); RTDBGASMAPINFO aMappings[128]; uint32_t cMappings = RT_ELEMENTS(aMappings); rc = RTDbgAsModuleQueryMapByIndex(hDbgAs, iModule, &aMappings[0], &cMappings, 0 /*fFlags*/); if (RT_SUCCESS(rc)) { for (uint32_t iMapping = 0; iMapping < cMappings; iMapping++) { if (aMappings[iMapping].iSeg == NIL_RTDBGSEGIDX) RTPrintf(" mapping #%u: %RTptr-%RTptr\n", iMapping, aMappings[iMapping].Address, aMappings[iMapping].Address + RTDbgModImageSize(hDbgMod) - 1); else { RTDBGSEGMENT SegInfo; rc = RTDbgModSegmentByIndex(hDbgMod, aMappings[iMapping].iSeg, &SegInfo); if (RT_SUCCESS(rc)) RTPrintf(" mapping #%u: %RTptr-%RTptr (segment #%u - '%s')", iMapping, aMappings[iMapping].Address, aMappings[iMapping].Address + SegInfo.cb, SegInfo.iSeg, SegInfo.szName); else RTPrintf(" mapping #%u: %RTptr-???????? (segment #%u)", iMapping, aMappings[iMapping].Address); } if (cVerbosityLevel > 1) { uint32_t cSymbols = RTDbgModSymbolCount(hDbgMod); RTPrintf(" %u symbols\n", cSymbols); for (uint32_t iSymbol = 0; iSymbol < cSymbols; iSymbol++) { RTDBGSYMBOL SymInfo; rc = RTDbgModSymbolByOrdinal(hDbgMod, iSymbol, &SymInfo); if (RT_SUCCESS(rc)) RTPrintf(" #%04u at %08x:%RTptr %05llx %s\n", SymInfo.iOrdinal, SymInfo.iSeg, SymInfo.offSeg, (uint64_t)SymInfo.cb, SymInfo.szName); } } } } else RTMsgError("RTDbgAsModuleQueryMapByIndex failed: %Rrc", rc); RTDbgModRelease(hDbgMod); } RTPrintf("*** End of Address Space Dump ***\n"); } /* * Read text from standard input and see if there is anything we can translate. */ for (;;) { /* Get a line. */ char szLine[_64K]; rc = RTStrmGetLine(pInput, szLine, sizeof(szLine)); if (rc == VERR_EOF) break; if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTStrmGetLine() -> %Rrc\n", rc); /* * Search the line for potential addresses and replace them with * symbols+offset. */ const char *pszStart = szLine; const char *psz = szLine; char ch; while ((ch = *psz) != '\0') { size_t cchAddress; uint64_t u64Address; if ( ( ch == '0' && (psz[1] == 'x' || psz[1] == 'X') && TryParseAddress(psz, &cchAddress, &u64Address)) || ( RT_C_IS_XDIGIT(ch) && TryParseAddress(psz, &cchAddress, &u64Address)) ) { /* Print. */ psz += cchAddress; if (pszStart != psz) RTStrmWrite(pOutput, pszStart, psz - pszStart); pszStart = psz; /* Try get the module. */ RTUINTPTR uAddr; RTDBGSEGIDX iSeg; RTDBGMOD hDbgMod; rc = RTDbgAsModuleByAddr(hDbgAs, u64Address, &hDbgMod, &uAddr, &iSeg); if (RT_SUCCESS(rc)) { if (iSeg != UINT32_MAX) RTStrmPrintf(pOutput, "=[%s:%u", RTDbgModName(hDbgMod), iSeg); else RTStrmPrintf(pOutput, "=[%s", RTDbgModName(hDbgMod), iSeg); /* * Do we have symbols? */ RTDBGSYMBOL Symbol; RTINTPTR offSym; rc = RTDbgAsSymbolByAddr(hDbgAs, u64Address, RTDBGSYMADDR_FLAGS_LESS_OR_EQUAL, &offSym, &Symbol, NULL); if (RT_SUCCESS(rc)) { if (!offSym) RTStrmPrintf(pOutput, "!%s", Symbol.szName); else if (offSym > 0) RTStrmPrintf(pOutput, "!%s+%#llx", Symbol.szName, offSym); else RTStrmPrintf(pOutput, "!%s-%#llx", Symbol.szName, -offSym); } else RTStrmPrintf(pOutput, "+%#llx", u64Address - uAddr); /* * Do we have line numbers? */ RTDBGLINE Line; RTINTPTR offLine; rc = RTDbgAsLineByAddr(hDbgAs, u64Address, &offLine, &Line, NULL); if (RT_SUCCESS(rc)) RTStrmPrintf(pOutput, " %Rbn(%u)", Line.szFilename, Line.uLineNo); RTStrmPrintf(pOutput, "]"); RTDbgModRelease(hDbgMod); } } else psz++; } if (pszStart != psz) RTStrmWrite(pOutput, pszStart, psz - pszStart); RTStrmPutCh(pOutput, '\n'); } return RTEXITCODE_SUCCESS; }