Changeset 38547 in vbox for trunk/src/VBox/Runtime/common/ldr
- Timestamp:
- Aug 26, 2011 12:58:47 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 73701
- Location:
- trunk/src/VBox/Runtime/common/ldr
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/ldr/ldrELFRelocatable.cpp.h
r38515 r38547 696 696 697 697 698 /** @copydoc RTLDROPS::pfnEnumSegments. */ 699 static DECLCALLBACK(int) RTLDRELF_NAME(EnumSegments)(PRTLDRMODINTERNAL pMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser) 700 { 701 PRTLDRMODELF pModElf = (PRTLDRMODELF)pMod; 702 703 return VERR_NOT_IMPLEMENTED; 704 } 705 706 707 698 708 /** 699 709 * The ELF module operations. … … 716 726 RTLDRELF_NAME(GetSymbolEx), 717 727 RTLDRELF_NAME(EnumDbgInfo), 728 RTLDRELF_NAME(EnumSegments), 718 729 42 719 730 }; -
trunk/src/VBox/Runtime/common/ldr/ldrEx.cpp
r38515 r38547 209 209 * @remark Not supported for RTLdrLoad() images. 210 210 */ 211 RTDECL(int) RTLdrGetBits(RTLDRMOD hLdrMod, void *pvBits, RT UINTPTR BaseAddress, PFNRTLDRIMPORT pfnGetImport, void *pvUser)211 RTDECL(int) RTLdrGetBits(RTLDRMOD hLdrMod, void *pvBits, RTLDRADDR BaseAddress, PFNRTLDRIMPORT pfnGetImport, void *pvUser) 212 212 { 213 213 LogFlow(("RTLdrGetBits: hLdrMod=%RTldrm pvBits=%p BaseAddress=%RTptr pfnGetImport=%p pvUser=%p\n", … … 247 247 * @remark Not supported for RTLdrLoad() images. 248 248 */ 249 RTDECL(int) RTLdrRelocate(RTLDRMOD hLdrMod, void *pvBits, RT UINTPTR NewBaseAddress, RTUINTPTR OldBaseAddress,249 RTDECL(int) RTLdrRelocate(RTLDRMOD hLdrMod, void *pvBits, RTLDRADDR NewBaseAddress, RTLDRADDR OldBaseAddress, 250 250 PFNRTLDRIMPORT pfnGetImport, void *pvUser) 251 251 { … … 289 289 * @param pValue Where to store the symbol value. 290 290 */ 291 RTDECL(int) RTLdrGetSymbolEx(RTLDRMOD hLdrMod, const void *pvBits, RTUINTPTR BaseAddress, const char *pszSymbol, RTUINTPTR *pValue) 291 RTDECL(int) RTLdrGetSymbolEx(RTLDRMOD hLdrMod, const void *pvBits, RTLDRADDR BaseAddress, const char *pszSymbol, 292 PRTLDRADDR pValue) 292 293 { 293 294 LogFlow(("RTLdrGetSymbolEx: hLdrMod=%RTldrm pvBits=%p BaseAddress=%RTptr pszSymbol=%p:{%s} pValue\n", … … 338 339 * @remark Not supported for RTLdrLoad() images. 339 340 */ 340 RTDECL(int) RTLdrEnumSymbols(RTLDRMOD hLdrMod, unsigned fFlags, const void *pvBits, RTUINTPTR BaseAddress, PFNRTLDRENUMSYMS pfnCallback, void *pvUser) 341 RTDECL(int) RTLdrEnumSymbols(RTLDRMOD hLdrMod, unsigned fFlags, const void *pvBits, RTLDRADDR BaseAddress, 342 PFNRTLDRENUMSYMS pfnCallback, void *pvUser) 341 343 { 342 344 LogFlow(("RTLdrEnumSymbols: hLdrMod=%RTldrm fFlags=%#x pvBits=%p BaseAddress=%RTptr pfnCallback=%p pvUser=%p\n", … … 390 392 RT_EXPORT_SYMBOL(RTLdrEnumDbgInfo); 391 393 394 395 RTDECL(int) RTLdrEnumSegments(RTLDRMOD hLdrMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser) 396 { 397 LogFlow(("RTLdrEnumSegments: hLdrMod=%RTldrm pfnCallback=%p pvUser=%p\n", 398 hLdrMod, pfnCallback, pvUser)); 399 400 /* 401 * Validate input. 402 */ 403 AssertMsgReturn(rtldrIsValid(hLdrMod), ("hLdrMod=%p\n", hLdrMod), VERR_INVALID_HANDLE); 404 AssertMsgReturn(RT_VALID_PTR(pfnCallback), ("pfnCallback=%p\n", pfnCallback), VERR_INVALID_PARAMETER); 405 PRTLDRMODINTERNAL pMod = (PRTLDRMODINTERNAL)hLdrMod; 406 //AssertMsgReturn(pMod->eState == LDR_STATE_OPENED, ("eState=%d\n", pMod->eState), VERR_WRONG_ORDER); 407 408 /* 409 * Do it. 410 */ 411 int rc; 412 if (pMod->pOps->pfnEnumSegments) 413 rc = pMod->pOps->pfnEnumSegments(pMod, pfnCallback, pvUser); 414 else 415 rc = VERR_NOT_SUPPORTED; 416 417 LogFlow(("RTLdrEnumSegments: returns %Rrc\n", rc)); 418 return rc; 419 420 } 421 RT_EXPORT_SYMBOL(RTLdrEnumSegments); 422 -
trunk/src/VBox/Runtime/common/ldr/ldrNative.cpp
r38515 r38547 69 69 rtldrNativeEnumSymbols, 70 70 /* ext: */ 71 NULL, 71 72 NULL, 72 73 NULL, -
trunk/src/VBox/Runtime/common/ldr/ldrPE.cpp
r38515 r38547 776 776 777 777 778 /** @copydoc RTLDROPS::pfnEnumSegments. */ 779 static DECLCALLBACK(int) rtldrPE_EnumSegments(PRTLDRMODINTERNAL pMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser) 780 { 781 return VINF_NOT_SUPPORTED; 782 } 783 784 778 785 /** @copydoc RTLDROPS::pfnDone */ 779 786 static DECLCALLBACK(int) rtldrPEDone(PRTLDRMODINTERNAL pMod) … … 835 842 rtldrPEGetSymbolEx, 836 843 rtldrPE_EnumDbgInfo, 844 rtldrPE_EnumSegments, 837 845 42 838 846 }, … … 859 867 rtldrPEGetSymbolEx, 860 868 rtldrPE_EnumDbgInfo, 869 rtldrPE_EnumSegments, 861 870 42 862 871 }, -
trunk/src/VBox/Runtime/common/ldr/ldrkStuff.cpp
r38531 r38547 629 629 630 630 631 /** @copydoc RTLDROPS::pfnEnumSegments. */ 632 static DECLCALLBACK(int) rtkldr_EnumSegments(PRTLDRMODINTERNAL pMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser) 633 { 634 PRTLDRMODKLDR pThis = (PRTLDRMODKLDR)pMod; 635 uint32_t const cSegments = pThis->pMod->cSegments; 636 PCKLDRSEG paSegments = &pThis->pMod->aSegments[0]; 637 638 for (uint32_t iSeg = 0; iSeg < cSegments; iSeg++) 639 { 640 RTLDRSEG Seg; 641 642 Seg.pchName = paSegments[iSeg].pchName; 643 Seg.cchName = paSegments[iSeg].cchName; 644 Seg.SelFlat = paSegments[iSeg].SelFlat; 645 Seg.Sel16bit = paSegments[iSeg].Sel16bit; 646 Seg.fFlags = paSegments[iSeg].fFlags; 647 AssertCompile(KLDRSEG_FLAG_16BIT == RTLDRSEG_FLAG_16BIT ); 648 AssertCompile(KLDRSEG_FLAG_OS2_ALIAS16 == RTLDRSEG_FLAG_OS2_ALIAS16); 649 AssertCompile(KLDRSEG_FLAG_OS2_CONFORM == RTLDRSEG_FLAG_OS2_CONFORM); 650 AssertCompile(KLDRSEG_FLAG_OS2_IOPL == RTLDRSEG_FLAG_OS2_IOPL ); 651 652 switch (paSegments[iSeg].enmProt) 653 { 654 default: 655 AssertMsgFailed(("%d\n", paSegments[iSeg].enmProt)); 656 case KPROT_NOACCESS: 657 Seg.fProt = 0; 658 break; 659 660 case KPROT_READONLY: Seg.fProt = RTMEM_PROT_READ; break; 661 case KPROT_READWRITE: Seg.fProt = RTMEM_PROT_READ | RTMEM_PROT_WRITE; break; 662 case KPROT_WRITECOPY: Seg.fProt = RTMEM_PROT_WRITE; break; 663 case KPROT_EXECUTE: Seg.fProt = RTMEM_PROT_EXEC; break; 664 case KPROT_EXECUTE_READ: Seg.fProt = RTMEM_PROT_EXEC | RTMEM_PROT_READ; break; 665 case KPROT_EXECUTE_READWRITE: Seg.fProt = RTMEM_PROT_EXEC | RTMEM_PROT_READ | RTMEM_PROT_WRITE; break; 666 case KPROT_EXECUTE_WRITECOPY: Seg.fProt = RTMEM_PROT_EXEC | RTMEM_PROT_WRITE; break; 667 } 668 Seg.cb = paSegments[iSeg].cb; 669 Seg.Alignment = paSegments[iSeg].Alignment; 670 Seg.LinkAddress = paSegments[iSeg].LinkAddress; 671 Seg.offFile = paSegments[iSeg].offFile; 672 Seg.cbFile = paSegments[iSeg].cbFile; 673 Seg.RVA = paSegments[iSeg].RVA; 674 Seg.cbMapped = paSegments[iSeg].cbMapped; 675 676 int rc = pfnCallback(pMod, &Seg, pvUser); 677 if (rc != VINF_SUCCESS) 678 return rc; 679 } 680 681 return VINF_SUCCESS; 682 } 683 684 631 685 /** 632 686 * Operations for a kLdr module. … … 645 699 rtkldr_GetSymbolEx, 646 700 rtkldr_EnumDbgInfo, 701 rtkldr_EnumSegments, 647 702 42 648 703 };
Note:
See TracChangeset
for help on using the changeset viewer.