Changeset 2893
- Timestamp:
- Dec 22, 2006, 7:01:38 PM (19 years ago)
- Location:
- trunk/kLdr
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kLdr/kLdrDyld.c
r2887 r2893 525 525 * @returns 0 on success and pValue and pfKind set. 526 526 * @returns KLDR_ERR_INVALID_HANDLE or KLDR_ERR_SYMBOL_NOT_FOUND on failure. 527 * @param hMod The module handle. 528 * @param uSymbolOrdinal The symbol ordinal. This is ignored if pszSymbolName is non-zero. 529 * @param pszSymbolName The symbol name. 530 * @param pValue Where to put the symbol value. Optional if pfKind is non-zero. 531 * @param pfKind Where to put the symbol kind flags. Optional if pValue is non-zero. 532 */ 533 int kLdrDyldQuerySymbol(HKLDRMOD hMod, uint32_t uSymbolOrdinal, const char *pszSymbolName, uintptr_t *pValue, uint32_t *pfKind) 527 * @param hMod The module handle. 528 * @param uSymbolOrdinal The symbol ordinal. This is ignored if pszSymbolName is non-zero. 529 * @param pszSymbolName The symbol name. 530 * @param pszSymbolVersion The symbol version. Optional. 531 * @param pValue Where to put the symbol value. Optional if pfKind is non-zero. 532 * @param pfKind Where to put the symbol kind flags. Optional if pValue is non-zero. 533 */ 534 int kLdrDyldQuerySymbol(HKLDRMOD hMod, uint32_t uSymbolOrdinal, const char *pszSymbolName, 535 const char *pszSymbolVersion, uintptr_t *pValue, uint32_t *pfKind) 534 536 { 535 537 int rc; -
trunk/kLdr/kLdrDyldMod.c
r2883 r2893 932 932 * pvUser points to the KLDRDYLDMOD. 933 933 */ 934 static int kldrDyldModFixupGetImportCallback(PKLDRMOD pMod, uint32_t iImport, uint32_t iSymbol, const char *pszSymbol, 934 static int kldrDyldModFixupGetImportCallback(PKLDRMOD pMod, uint32_t iImport, uint32_t iSymbol, 935 const char *pchSymbol, size_t cchSymbol, const char *pszVersion, 935 936 PKLDRADDR puValue, uint32_t *pfKind, void *pvUser) 936 937 { … … 958 959 959 960 rc = kLdrModQuerySymbol(pPrereqMod->pMod, NULL, KLDRMOD_BASEADDRESS_MAP, 960 iSymbol, pszSymbol, kldrDyldModFixupGetImportCallback, pPrereqMod, puValue, pfKind); 961 iSymbol, pchSymbol, cchSymbol, pszVersion, 962 kldrDyldModFixupGetImportCallback, pPrereqMod, puValue, pfKind); 961 963 if (rc) 962 964 { 963 if (p szSymbol)964 kldrDyldFailure(rc, "%s[%d]->%s.% s", pDyldMod->pMod->pszName, iImport,965 pPrereqMod->pMod->pszName, pszSymbol);965 if (pchSymbol) 966 kldrDyldFailure(rc, "%s[%d]->%s.%.*s%s", pDyldMod->pMod->pszName, iImport, 967 pPrereqMod->pMod->pszName, cchSymbol, pchSymbol, pszVersion ? pszVersion : ""); 966 968 else 967 kldrDyldFailure(rc, "%s[%d]->%s.%d ", pDyldMod->pMod->pszName, iImport,968 pPrereqMod->pMod->pszName, iSymbol );969 kldrDyldFailure(rc, "%s[%d]->%s.%d%s", pDyldMod->pMod->pszName, iImport, 970 pPrereqMod->pMod->pszName, iSymbol, pszVersion ? pszVersion : ""); 969 971 } 970 972 } … … 980 982 KLDRADDR uValue; 981 983 rc = kLdrModQuerySymbol(pBindMod->pMod, NULL, KLDRMOD_BASEADDRESS_MAP, 982 iSymbol, pszSymbol, kldrDyldModFixupGetImportCallback, pBindMod, &uValue, &fKind); 984 iSymbol, pchSymbol, cchSymbol, pszVersion, 985 kldrDyldModFixupGetImportCallback, pBindMod, &uValue, &fKind); 983 986 if ( !rc 984 987 && ( !fFound … … 1000 1003 if (!fFound) 1001 1004 { 1002 if (p szSymbol)1003 kldrDyldFailure(rc, "%s->% s", pDyldMod->pMod->pszName, pszSymbol);1005 if (pchSymbol) 1006 kldrDyldFailure(rc, "%s->%.*s%s", pDyldMod->pMod->pszName, cchSymbol, pchSymbol, pszVersion ? pszVersion : ""); 1004 1007 else 1005 kldrDyldFailure(rc, "%s->%d ", pDyldMod->pMod->pszName, iSymbol);1008 kldrDyldFailure(rc, "%s->%d%s", pDyldMod->pMod->pszName, iSymbol, pszVersion ? pszVersion : ""); 1006 1009 } 1007 1010 } … … 1277 1280 1278 1281 rc = kLdrModQuerySymbol(pMod->pMod, NULL, KLDRMOD_BASEADDRESS_MAP, 1279 uSymbolOrdinal, pszSymbolName, kldrDyldModFixupGetImportCallback, pMod, 1282 uSymbolOrdinal, pszSymbolName, kLdrHlpStrLen(pszSymbolName), NULL, 1283 kldrDyldModFixupGetImportCallback, pMod, 1280 1284 &uValue, &fKind); 1281 1285 if (!rc) -
trunk/kLdr/kLdrHlp.c
r2883 r2893 223 223 /* not so simple. */ 224 224 /** @todo I've got code for this in libc somewhere. */ 225 rc = -1; 225 226 } 226 227 if (!rc) -
trunk/kLdr/kLdrModLX.c
r2890 r2893 118 118 static int kldrModLXDoCreate(PKLDRRDR pRdr, off_t offNewHdr, PKLDRMODLX *ppModLX); 119 119 static const uint8_t *kldrModLXDoNameTableLookupByOrdinal(const uint8_t *pbNameTable, int32_t cbNameTable, uint32_t iOrdinal); 120 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *p szSymbol, uint32_t *piSymbol);120 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *pchSymbol, uint32_t cchSymbol, uint32_t *piSymbol); 121 121 #if 0 122 122 static const uint8_t *kldrModLXDoNameTableLookupByName(const uint8_t *pbNameTable, int32_t cbNameTable, … … 542 542 /** @copydoc kLdrModQuerySymbol */ 543 543 static int kldrModLXQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol, 544 const char *p szSymbol, PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser,545 P KLDRADDR puValue, uint32_t *pfKind)544 const char *pchSymbol, size_t cchSymbol, const char *pszVersion, 545 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind) 546 546 { 547 547 PKLDRMODLX pModLX = (PKLDRMODLX)pMod->pvData; … … 560 560 * Translate the symbol name into an ordinal. 561 561 */ 562 if (p szSymbol)563 { 564 rc = kldrModLXDoNameLookup(pModLX, p szSymbol, &iSymbol);562 if (pchSymbol) 563 { 564 rc = kldrModLXDoNameLookup(pModLX, pchSymbol, cchSymbol, &iSymbol); 565 565 if (rc) 566 566 return rc; … … 625 625 /* anyone actually using TYPEINFO will end up here. */ 626 626 KLDRMODLX_ASSERT(!"Bad bundle type"); 627 break;627 return KLDR_ERR_LX_BAD_BUNDLE; 628 628 } 629 629 … … 664 664 * @returns See kLdrModQuerySymbol. 665 665 * @param pModLX The module to lookup the symbol in. 666 * @param pszSymbol The symbol to lookup. 666 * @param pchSymbol The symbol to lookup. 667 * @param cchSymbol The symbol name length. 667 668 * @param piSymbol Where to store the symbol ordinal. 668 669 */ 669 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *p szSymbol, uint32_t *piSymbol)670 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *pchSymbol, uint32_t cchSymbol, uint32_t *piSymbol) 670 671 { 671 672 … … 774 775 int rc; 775 776 uint32_t iSymbol; 776 const char *pszSymbol; 777 const char *pchSymbol; 778 uint8_t cchSymbol; 777 779 778 780 if (!pfnGetForwarder) … … 792 794 { 793 795 iSymbol = pEntry->e32_variant.e32_fwd.value; 794 pszSymbol = NULL; /* no symbol name. */ 796 pchSymbol = NULL; /* no symbol name. */ 797 cchSymbol = 0; 795 798 } 796 799 else … … 858 861 return KLDR_ERR_LX_BAD_FORWARDER; 859 862 860 pszSymbol = NULL; /* no symbol name. */ 863 pchSymbol = NULL; /* no symbol name. */ 864 cchSymbol = 0; 861 865 } 862 866 else 863 867 { 864 /* Make a stack copy of the name that's zero terminated. */ 865 char *pszCopy = kLdrHlpAllocA(*pbName + 1); 866 kLdrHlpMemCopy(pszCopy, pbName + 1, *pbName); 867 pszCopy[*pbName] = '\0'; 868 869 pszSymbol = pszCopy; 868 pchSymbol = (char *)pbName + 1; 869 cchSymbol = *pbName; 870 870 iSymbol = NIL_KLDRMOD_SYM_ORDINAL; 871 871 } … … 875 875 * Resolve the forwarder. 876 876 */ 877 rc = pfnGetForwarder(pModLX->pMod, pEntry->e32_variant.e32_fwd.modord - 1, iSymbol, p szSymbol, puValue, pfKind, pvUser);877 rc = pfnGetForwarder(pModLX->pMod, pEntry->e32_variant.e32_fwd.modord - 1, iSymbol, pchSymbol, cchSymbol, NULL, puValue, pfKind, pvUser); 878 878 if (!rc && pfKind) 879 879 *pfKind |= KLDRSYMKIND_FORWARDER; … … 2004 2004 * Iterate the page map pages. 2005 2005 */ 2006 for (iPage = 0 ; !rc && iPage < pObj->o32_mapsize; iPage++, pbPage += OBJPAGELEN)2006 for (iPage = 0, rc = 0; !rc && iPage < pObj->o32_mapsize; iPage++, pbPage += OBJPAGELEN) 2007 2007 { 2008 2008 const uint8_t * const pbFixupRecEnd = pModLX->pbFixupRecs + pModLX->paoffPageFixups[iPage + pObj->o32_pagemap]; … … 2115 2115 2116 2116 /* resolve it. */ 2117 rc = pfnGetImport(pMod, iModule, iSymbol, NULL, &uValue, &fKind, pvUser);2117 rc = pfnGetImport(pMod, iModule, iSymbol, NULL, 0, NULL, &uValue, &fKind, pvUser); 2118 2118 if (rc) 2119 2119 return rc; … … 2129 2129 uint16_t offSymbol; 2130 2130 const uint8_t *pbSymbol; 2131 char szSymbol[260];2132 2131 2133 2132 /* the module ordinal */ … … 2166 2165 2167 2166 /* resolve it. */ 2168 kLdrHlpMemCopy(szSymbol, pbSymbol + 1, *pbSymbol); 2169 szSymbol[*pbSymbol] = '\0'; 2170 rc = pfnGetImport(pMod, iModule, NIL_KLDRMOD_SYM_ORDINAL, szSymbol, &uValue, &fKind, pvUser); 2167 rc = pfnGetImport(pMod, iModule, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pbSymbol + 1, *pbSymbol, NULL, 2168 &uValue, &fKind, pvUser); 2171 2169 if (rc) 2172 2170 return rc; … … 2263 2261 kldrModLXGetStackInfo, 2264 2262 kldrModLXQueryMainEntrypoint, 2263 NULL /* fixme */, 2264 NULL /* fixme */, 2265 2265 kldrModLXEnumDbgInfo, 2266 2266 kldrModLXHasDbgInfo, … … 2277 2277 kldrModLXGetBits, 2278 2278 kldrModLXRelocateBits, 2279 NULL /* fixme: pfnMostlyDone */, 2279 2280 42 /* the end */ 2280 2281 }; -
trunk/kLdr/kLdrModNative.c
r2883 r2893 511 511 /** @copydoc kLdrModQuerySymbol */ 512 512 static int kldrModNativeQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol, 513 const char *p szSymbol, PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser,514 P KLDRADDR puValue, uint32_t *pfKind)513 const char *pchSymbol, size_t cchSymbol, const char *pszVersion, 514 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind) 515 515 { 516 516 PKLDRMODNATIVE pModNative = (PKLDRMODNATIVE)pMod->pvData; 517 const char *pszSymbol = pchSymbol; 517 518 #ifdef __OS2__ 518 519 APIRET rc; 519 520 PFN pfn; 520 521 if (!pszSymbol && iSymbol >= 0x10000) 521 #elif defined(__WIN__) 522 FARPROC pfn; 523 #else 524 # error "Port me" 525 #endif 526 527 /* make stack copy of the symbol if it isn't zero terminated. */ 528 if (pszSymbol && pszSymbol[cchSymbol]) 529 { 530 char *pszCopy = kLdrHlpAllocA(cchSymbol + 1); 531 kLdrHlpMemCopy(pszCopy, pchSymbol, cchSymbol); 532 pszCopy[cchSymbol] = '\0'; 533 pszSymbol = pszCopy; 534 } 535 536 #ifdef __OS2__ 537 if (!pchSymbol && iSymbol >= 0x10000) 522 538 return KLDR_ERR_SYMBOL_NOT_FOUND; 523 539 … … 550 566 551 567 #elif defined(__WIN__) 552 FARPROC pfn;553 554 568 if (!pszSymbol && iSymbol >= 0x10000) 555 569 return KLDR_ERR_SYMBOL_NOT_FOUND; … … 1023 1037 kldrModNativeGetStackInfo, 1024 1038 kldrModNativeQueryMainEntrypoint, 1039 NULL /* fixme */, 1040 NULL /* fixme */, 1025 1041 kldrModNativeEnumDbgInfo, 1026 1042 kldrModNativeHasDbgInfo, … … 1037 1053 kldrModNativeGetBits, 1038 1054 kldrModNativeRelocateBits, 1055 NULL /* fixme */, 1039 1056 42 /* the end */ 1040 1057 }; -
trunk/kLdr/kLdrModPE.c
r2891 r2893 685 685 /** @copydoc kLdrModQuerySymbol */ 686 686 static int kldrModPEQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol, 687 const char *pchSymbol, size_t cchSymbol, const char *pszVersion, 687 const char *pchSymbol, size_t cchSymbol, const char *pszVersion, 688 688 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind) 689 689 … … 911 911 * Now the rest is up to the callback (almost). 912 912 */ 913 rc = pfnGetForwarder(pModPE->pMod, iImpModule, iSymbol, pszSymbol, 913 rc = pfnGetForwarder(pModPE->pMod, iImpModule, iSymbol, pszSymbol, 914 914 pszSymbol ? kLdrHlpStrLen(pszSymbol) : 0, NULL, puValue, pfKind, pvUser); 915 915 if (!rc && pfKind) … … 1587 1587 { 1588 1588 const IMAGE_IMPORT_BY_NAME *pName = KLDRMODPE_RVA2TYPE(pvMapping, pThunk->u1.Ordinal, const IMAGE_IMPORT_BY_NAME *); 1589 rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name, 1589 rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name, 1590 1590 kLdrHlpStrLen((const char *)pName->Name), NULL, &Value, &fKind, pvUser); 1591 1591 } … … 1653 1653 { 1654 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, 1655 rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name, 1656 1656 kLdrHlpStrLen((const char *)pName->Name), NULL, &Value, &fKind, pvUser); 1657 1657 } -
trunk/kLdr/kLdrRdr.c
r2861 r2893 105 105 int kLdrRdrOpen(PPKLDRRDR ppRdr, const char *pszFilename) 106 106 { 107 int rc ;107 int rc = -1; 108 108 PCKLDRRDROPS pCur; 109 109 for (pCur = g_pRdrHead; pCur; pCur = pCur->pNext) -
trunk/kLdr/kLdrRdrFile.c
r2883 r2893 1074 1074 if ((uintptr_t)pszFilename >= 0x20000000) 1075 1075 { 1076 char *psz = (char *)kLdrHlpAllocA(cchFilename + 1); 1076 char *psz; 1077 cchFilename = kLdrHlpStrLen(szFilename); 1078 psz = (char *)kLdrHlpAllocA(cchFilename + 1); 1077 1079 kLdrHlpMemCopy(psz, pszFilename, cchFilename + 1); 1078 1080 pszFilename = psz;
Note:
See TracChangeset
for help on using the changeset viewer.