- Timestamp:
- May 14, 2013 6:22:53 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 85754
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/win/lazy-dbghelp.h
r46048 r46078 47 47 rc = RTPathAppend(szPath, sizeof(szPath), "Debugging Tools for Windows (x86)\\dbghelp.dll"); 48 48 #else 49 rc = RTPathAppend(szPath, sizeof(szPath), "Debugging Tools for Windows ( amd64)\\dbghelp.dll");49 rc = RTPathAppend(szPath, sizeof(szPath), "Debugging Tools for Windows (x64)\\dbghelp.dll"); 50 50 #endif 51 51 if (RTPathExists(szPath)) … … 60 60 } 61 61 62 RTLDRLAZY_MODULE (dbghelp, "dbghelp.dll");62 RTLDRLAZY_MODULE_EX(dbghelp, "dbghelp.dll", rtLdrLazyLoadDbgHelp); 63 63 64 64 RTLDRLAZY_FUNC(dbghelp, BOOL, WINAPI, SymInitialize, (HANDLE a1, PCWSTR a2, BOOL a3), (a1, a2, a3), FALSE); -
trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp
r44399 r46078 3802 3802 return pCmdHlp->pfnVBoxError(pCmdHlp, rc, "DBGFR3AsSymbolByName(,,%s,)\n", pArg->u.pszString); 3803 3803 3804 rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, "%R ptr %s\n", Symbol.Value, Symbol.szName);3804 rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, "%RTptr %s\n", Symbol.Value, Symbol.szName); 3805 3805 } 3806 3806 else -
trunk/src/VBox/Debugger/DBGConsole.cpp
r46074 r46078 1050 1050 if (RT_SUCCESS(rc)) 1051 1051 { 1052 1053 1052 /* 1054 1053 * Set debug config log callback. … … 1084 1083 } 1085 1084 } 1086 1087 1085 } 1088 1086 else -
trunk/src/VBox/Runtime/common/dbg/dbgcfg.cpp
r46074 r46078 1160 1160 if (RT_SUCCESS(rc)) 1161 1161 { 1162 if ( pThis->pfnLogCallback != NULL1163 && (pfnCallback == NULL1164 || pfnCallback == pThis->pfnLogCallback))1162 if ( pThis->pfnLogCallback == NULL 1163 || pfnCallback == NULL 1164 || pfnCallback == pThis->pfnLogCallback) 1165 1165 { 1166 1166 pThis->pfnLogCallback = NULL; -
trunk/src/VBox/Runtime/common/dbg/dbgmoddbghelp.cpp
r46048 r46078 345 345 static DECLCALLBACK(int) rtDbgModDbgHelpAddSegmentsCallback(RTLDRMOD hLdrMod, PCRTLDRSEG pSeg, void *pvUser) 346 346 { 347 RTDBGMOD hCnt = (RTDBGMOD)pvUser;347 RTDBGMODBGHELPARGS *pArgs = (RTDBGMODBGHELPARGS *)pvUser; 348 348 349 349 Log(("Segment %.*s: LinkAddress=%#llx RVA=%#llx cb=%#llx\n", 350 350 pSeg->cchName, pSeg->pchName, (uint64_t)pSeg->LinkAddress, (uint64_t)pSeg->RVA, pSeg->cb)); 351 352 if (!pSeg->RVA) 353 pArgs->uModAddr = pSeg->LinkAddress; 354 351 355 NOREF(hLdrMod); 352 356 char *pszName = (char *)pSeg->pchName; … … 359 363 360 364 RTLDRADDR cb = RT_MAX(pSeg->cb, pSeg->cbMapped); 361 return RTDbgModSegmentAdd( hCnt, pSeg->RVA, cb, pszName, 0 /*fFlags*/, NULL);365 return RTDbgModSegmentAdd(pArgs->hCnt, pSeg->RVA, cb, pszName, 0 /*fFlags*/, NULL); 362 366 } 363 367 … … 375 379 376 380 /* 377 * Try load the module into an empty address space. 381 * Create a container for copying the information into. We do this early 382 * so we can determine the image base address. 378 383 */ 379 static uint32_t volatile s_uFakeHandle = 0x3940000; 380 HANDLE hFake; 381 do 382 hFake = (HANDLE)(uintptr_t)ASMAtomicIncU32(&s_uFakeHandle); 383 while (hFake == NULL || hFake == INVALID_HANDLE_VALUE); 384 385 int rc; 386 if (SymInitialize(hFake, NULL /*SearchPath*/, FALSE /*fInvalidProcess*/)) 384 RTDBGMOD hCnt; 385 int rc = RTDbgModCreate(&hCnt, pMod->pszName, 0 /*cbSeg*/, 0 /*fFlags*/); 386 if (RT_SUCCESS(rc)) 387 387 { 388 SymSetOptions(SYMOPT_LOAD_LINES | SymGetOptions());389 390 PRTUTF16 pwszDbgFile;391 rc = RTStrToUtf16(pMod->pszDbgFile, &pwszDbgFile);388 RTDBGMODBGHELPARGS Args; 389 RT_ZERO(Args); 390 Args.hCnt = hCnt; 391 rc = pMod->pImgVt->pfnEnumSegments(pMod, rtDbgModDbgHelpAddSegmentsCallback, &Args); 392 392 if (RT_SUCCESS(rc)) 393 393 { 394 uint64_t uModAddr = SymLoadModuleExW(hFake, NULL /*hFile*/, pwszDbgFile, NULL /*pszModName*/, 395 0 /*uLoadAddr*/, 0 /*cbImage*/, NULL /*pModData*/, 0 /*fFlags*/); 396 if (uModAddr != 0) 394 uint32_t cbImage = pMod->pImgVt->pfnImageSize(pMod); 395 uint64_t uImageBase = Args.uModAddr ? Args.uModAddr : 0x4000000; 396 397 /* 398 * Try load the module into an empty address space. 399 */ 400 static uint32_t volatile s_uFakeHandle = 0x3940000; 401 HANDLE hFake; 402 do 403 hFake = (HANDLE)(uintptr_t)ASMAtomicIncU32(&s_uFakeHandle); 404 while (hFake == NULL || hFake == INVALID_HANDLE_VALUE); 405 406 if (SymInitialize(hFake, NULL /*SearchPath*/, FALSE /*fInvalidProcess*/)) 397 407 { 398 /* 399 * Create a container for copying the information into. 400 */ 401 RTDBGMOD hCnt; 402 rc = RTDbgModCreate(&hCnt, pMod->pszName, 0 /*cbSeg*/, 0 /*fFlags*/); 408 SymSetOptions(SYMOPT_LOAD_LINES | SymGetOptions()); 409 410 PRTUTF16 pwszDbgFile; 411 rc = RTStrToUtf16(pMod->pszDbgFile, &pwszDbgFile); 403 412 if (RT_SUCCESS(rc)) 404 413 { 405 rc = pMod->pImgVt->pfnEnumSegments(pMod, rtDbgModDbgHelpAddSegmentsCallback, hCnt); 406 if (RT_SUCCESS(rc)) 414 uint64_t uModAddr = SymLoadModuleExW(hFake, NULL /*hFile*/, pwszDbgFile, NULL /*pszModName*/, 415 uImageBase, cbImage, NULL /*pModData*/, 0 /*fFlags*/); 416 if (uModAddr != 0) 417 { 407 418 rc = rtDbgModDbgHelpCopySymbols(pMod, hCnt, hFake, uModAddr); 408 if (RT_SUCCESS(rc)) 409 rc = rtDbgModDbgHelpCopyLineNumbers(pMod, hCnt, hFake, uModAddr); 410 if (RT_SUCCESS(rc)) 411 { 412 pMod->pvDbgPriv = hCnt; 413 pMod->pDbgVt = &g_rtDbgModVtDbgDbgHelp; 414 hCnt = NIL_RTDBGMOD; 419 if (RT_SUCCESS(rc)) 420 rc = rtDbgModDbgHelpCopyLineNumbers(pMod, hCnt, hFake, uModAddr); 421 if (RT_SUCCESS(rc)) 422 { 423 pMod->pvDbgPriv = hCnt; 424 pMod->pDbgVt = &g_rtDbgModVtDbgDbgHelp; 425 hCnt = NIL_RTDBGMOD; 426 } 427 428 SymUnloadModule64(hFake, uModAddr); 415 429 } 416 RTDbgModRelease(hCnt); 430 else 431 rc = RTErrConvertFromWin32(GetLastError()); 432 RTUtf16Free(pwszDbgFile); 417 433 } 418 434 419 SymUnloadModule64(hFake, uModAddr);435 BOOL fRc2 = SymCleanup(hFake); Assert(fRc2); NOREF(fRc2); 420 436 } 421 437 else 422 438 rc = RTErrConvertFromWin32(GetLastError()); 423 RTUtf16Free(pwszDbgFile);424 439 } 425 426 BOOL fRc2 = SymCleanup(hFake); Assert(fRc2); NOREF(fRc2); 440 RTDbgModRelease(hCnt); 427 441 } 428 else429 rc = RTErrConvertFromWin32(GetLastError());430 442 return rc; 431 443 } -
trunk/src/VBox/Runtime/common/ldr/ldrPE.cpp
r46048 r46078 942 942 SegInfo.fProt = RTMEM_PROT_READ; 943 943 SegInfo.Alignment = 1; 944 SegInfo.LinkAddress = 0;945 SegInfo.RVA = SegInfo.LinkAddress;944 SegInfo.LinkAddress = pModPe->uImageBase; 945 SegInfo.RVA = 0; 946 946 SegInfo.offFile = 0; 947 947 SegInfo.cb = pModPe->cbHeaders; … … 981 981 else 982 982 { 983 SegInfo.LinkAddress = pSh->VirtualAddress ;984 SegInfo.RVA = SegInfo.LinkAddress;983 SegInfo.LinkAddress = pSh->VirtualAddress + pModPe->uImageBase ; 984 SegInfo.RVA = pSh->VirtualAddress; 985 985 SegInfo.cbMapped = RT_ALIGN(SegInfo.cb, SegInfo.Alignment); 986 986 if (i + 1 < pModPe->cSections && !(pSh[1].Characteristics & IMAGE_SCN_TYPE_NOLOAD)) … … 1012 1012 PRTLDRMODPE pModPe = (PRTLDRMODPE)pMod; 1013 1013 1014 /* Note! LinkAddress == RVA */1014 LinkAddress -= pModPe->uImageBase; 1015 1015 1016 1016 /* Special header segment. */ … … 1051 1051 PRTLDRMODPE pModPe = (PRTLDRMODPE)pMod; 1052 1052 1053 LinkAddress -= pModPe->uImageBase; 1053 1054 if (LinkAddress > pModPe->cbImage) 1054 1055 return VERR_LDR_INVALID_LINK_ADDRESS; 1055 1056 *pRva = LinkAddress; 1057 1056 1058 return VINF_SUCCESS; 1057 1059 } … … 1082 1084 uint32_t *piSeg, PRTLDRADDR poffSeg) 1083 1085 { 1084 int rc = rtldrPE_LinkAddressToSegOffset(pMod, Rva, piSeg, poffSeg); 1086 PRTLDRMODPE pModPe = (PRTLDRMODPE)pMod; 1087 int rc = rtldrPE_LinkAddressToSegOffset(pMod, Rva + pModPe->uImageBase, piSeg, poffSeg); 1085 1088 if (RT_FAILURE(rc)) 1086 1089 rc = VERR_LDR_INVALID_RVA; -
trunk/src/VBox/Runtime/tools/RTNtDbgHelp.cpp
r45929 r46078 264 264 RTPrintf(" PdbSig = %#010x\n", ModInfo.PdbSig); 265 265 RTPrintf(" PdbSig70 = %RTuuid\n", &ModInfo.PdbSig70); 266 RTPrintf(" Pdb Sig= %#010x\n", ModInfo.PdbAge);266 RTPrintf(" PdbAge = %#010x\n", ModInfo.PdbAge); 267 267 RTPrintf(" PdbUnmatched = %RTbool\n", ModInfo.PdbUnmatched); 268 268 RTPrintf(" DbgUnmatched = %RTbool\n", ModInfo.DbgUnmatched); … … 350 350 351 351 case 'h': 352 RTPrintf("usage: %s [-v|--verbose] [-q|--quiet] [- f|--force] [-o|--output <file.h>] <dir1|pdb1>[...]\n"352 RTPrintf("usage: %s [-v|--verbose] [-q|--quiet] [-a <addr>] [-l <file>] [-d] [...]\n" 353 353 " or: %s [-V|--version]\n" 354 354 " or: %s [-h|--help]\n",
Note:
See TracChangeset
for help on using the changeset viewer.