Ignore:
Timestamp:
Nov 21, 2006, 10:40:45 PM (19 years ago)
Author:
bird
Message:

interface adjustment (in progress).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrModPE.c

    r2883 r2891  
    685685/** @copydoc kLdrModQuerySymbol */
    686686static int kldrModPEQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol,
    687                                 const char *pszSymbol, PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser,
    688                                 PKLDRADDR puValue, uint32_t *pfKind)
     687                                const char *pchSymbol, size_t cchSymbol, const char *pszVersion,
     688                                PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind)
     689
    689690{
    690691    PKLDRMODPE                      pModPE = (PKLDRMODPE)pMod->pvData;
     
    704705        <   sizeof(IMAGE_EXPORT_DIRECTORY))
    705706        return KLDR_ERR_SYMBOL_NOT_FOUND;
     707    if (pszVersion && *pszVersion)
     708        return KLDR_ERR_SYMBOL_NOT_FOUND;
    706709
    707710    pExpDir = KLDRMODPE_RVA2TYPE(pvBits,
    708711                                 pModPE->Hdrs.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress,
    709712                                 PIMAGE_EXPORT_DIRECTORY);
    710     if (!pszSymbol)
     713    if (!pchSymbol)
    711714    {
    712715        /*
     
    742745                {
    743746                    pszName = KLDRMODPE_RVA2TYPE(pvBits, paRVANames[i], const char *);
    744                     KLDRMODPE_ASSERT(kLdrHlpStrComp(pszName, pszSymbol));
     747                    KLDRMODPE_ASSERT(kLdrHlpStrNComp(pszName, pchSymbol, cchSymbol) || pszName[cchSymbol]);
    745748                    KLDRMODPE_ASSERT(i == 0 || kLdrHlpStrComp(pszName, KLDRMODPE_RVA2TYPE(pvBits, paRVANames[i - 1], const char *)));
    746749                }
     
    751754            i = (iEnd - iStart) / 2 + iStart;
    752755            pszName = KLDRMODPE_RVA2TYPE(pvBits, paRVANames[i - 1], const char *);
    753             diff = kLdrHlpStrComp(pszName, pszSymbol);
     756            diff = kLdrHlpStrNComp(pszName, pchSymbol, cchSymbol);
     757            if (!diff)
     758                diff = pszName[cchSymbol] - 0;
    754759            if (diff < 0)
    755760                iStart = i + 1;     /* The symbol must be after the current name. */
     
    906911             * Now the rest is up to the callback (almost).
    907912             */
    908             rc = pfnGetForwarder(pModPE->pMod, iImpModule, iSymbol, pszSymbol, puValue, pfKind, pvUser);
     913            rc = pfnGetForwarder(pModPE->pMod, iImpModule, iSymbol, pszSymbol,
     914                                 pszSymbol ? kLdrHlpStrLen(pszSymbol) : 0, NULL, puValue, pfKind, pvUser);
    909915            if (!rc && pfKind)
    910916                *pfKind |= KLDRSYMKIND_FORWARDER;
     
    972978        for (iName = 0; iName < cNames; iName++)
    973979        {
     980            const char *pszName;
    974981            if (paOrdinals[iName] != iFunction)
    975982                continue;
    976983            fFoundName = 1;
    977             rc = pfnCallback(pMod, iFunction + pExpDir->Base, KLDRMODPE_RVA2TYPE(pvBits, paRVANames[iName], const char *),
     984            pszName = KLDRMODPE_RVA2TYPE(pvBits, paRVANames[iName], const char *);
     985            rc = pfnCallback(pMod, iFunction + pExpDir->Base, pszName, kLdrHlpStrLen(pszName), NULL,
    978986                             uValue, fKind, pvUser);
    979987            if (rc)
     
    986994        if (!fFoundName)
    987995        {
    988             rc = pfnCallback(pMod, iFunction + pExpDir->Base, NULL, uValue, fKind, pvUser);
     996            rc = pfnCallback(pMod, iFunction + pExpDir->Base, NULL, 0, NULL, uValue, fKind, pvUser);
    989997            if (rc)
    990998                return rc;
     
    15751583            /* Ordinal or name import? */
    15761584            if (IMAGE_SNAP_BY_ORDINAL32(pThunk->u1.Ordinal))
    1577                 rc = pfnGetImport(pMod, iImp, IMAGE_ORDINAL32(pThunk->u1.Ordinal), NULL, &Value, &fKind, pvUser);
     1585                rc = pfnGetImport(pMod, iImp, IMAGE_ORDINAL32(pThunk->u1.Ordinal), NULL, 0, NULL, &Value, &fKind, pvUser);
    15781586            else if (KLDRMODPE_VALID_RVA(pModPE, pThunk->u1.Ordinal))
    15791587            {
    15801588                const IMAGE_IMPORT_BY_NAME *pName = KLDRMODPE_RVA2TYPE(pvMapping, pThunk->u1.Ordinal, const IMAGE_IMPORT_BY_NAME *);
    1581                 rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name, &Value, &fKind, pvUser);
     1589                rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name,
     1590                                  kLdrHlpStrLen((const char *)pName->Name), NULL, &Value, &fKind, pvUser);
    15821591            }
    15831592            else
     
    16401649            /* Ordinal or name import? */
    16411650            if (IMAGE_SNAP_BY_ORDINAL64(pThunk->u1.Ordinal))
    1642                 rc = pfnGetImport(pMod, iImp, (uint32_t)IMAGE_ORDINAL64(pThunk->u1.Ordinal), NULL, &Value, &fKind, pvUser);
     1651                rc = pfnGetImport(pMod, iImp, (uint32_t)IMAGE_ORDINAL64(pThunk->u1.Ordinal), NULL, 0, NULL, &Value, &fKind, pvUser);
    16431652            else if (KLDRMODPE_VALID_RVA(pModPE, pThunk->u1.Ordinal))
    1644                 rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL,
    1645                                   KLDRMODPE_RVA2TYPE(pvMapping, pThunk->u1.Ordinal, const char *),
    1646                                   &Value, &fKind, pvUser);
     1653            {
     1654                const IMAGE_IMPORT_BY_NAME *pName = KLDRMODPE_RVA2TYPE(pvMapping, pThunk->u1.Ordinal, const IMAGE_IMPORT_BY_NAME *);
     1655                rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name,
     1656                                  kLdrHlpStrLen((const char *)pName->Name), NULL, &Value, &fKind, pvUser);
     1657            }
    16471658            else
    16481659            {
     
    19441955    kldrModPEGetStackInfo,
    19451956    kldrModPEQueryMainEntrypoint,
     1957    NULL, /** @todo resources */
     1958    NULL, /** @todo resources */
    19461959    kldrModPEEnumDbgInfo,
    19471960    kldrModPEHasDbgInfo,
     
    19581971    kldrModPEGetBits,
    19591972    kldrModPERelocateBits,
     1973    NULL, /** @todo mostly done */
    19601974    42 /* the end */
    19611975};
Note: See TracChangeset for help on using the changeset viewer.