Changeset 3567 for trunk/kStuff/kLdr/kLdrModPE.c
- Timestamp:
- Aug 27, 2007, 9:54:05 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kStuff/kLdr/kLdrModPE.c
r3537 r3567 58 58 */ 59 59 #define KLDRMODPE_RVA2TYPE(pvBits, uRVA, type) \ 60 ( (type) (( uintptr_t)(pvBits) + (uintptr_t)(uRVA)) )60 ( (type) ((KUPTR)(pvBits) + (KUPTR)(uRVA)) ) 61 61 62 62 /** @def KLDRMODPE_VALID_RVA … … 86 86 const void *pvMapping; 87 87 /** Reserved flags. */ 88 uint32_tf32Reserved;88 KU32 f32Reserved; 89 89 /** The number of imported modules. 90 * If ~( uint32_t)0 this hasn't been determined yet. */91 uint32_tcImportModules;90 * If ~(KU32)0 this hasn't been determined yet. */ 91 KU32 cImportModules; 92 92 /** The offset of the NT headers. */ 93 93 KLDRFOFF offHdrs; … … 102 102 * Internal Functions * 103 103 *******************************************************************************/ 104 static int32_tkldrModPENumberOfImports(PKLDRMOD pMod, const void *pvBits);104 static KI32 kldrModPENumberOfImports(PKLDRMOD pMod, const void *pvBits); 105 105 static int kldrModPERelocateBits(PKLDRMOD pMod, void *pvBits, KLDRADDR NewBaseAddress, KLDRADDR OldBaseAddress, 106 106 PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser); … … 112 112 static void kldrModPEDoOptionalHeaderConversion(PIMAGE_OPTIONAL_HEADER64 pOptionalHeader); 113 113 static int kldrModPEDoForwarderQuery(PKLDRMODPE pModPE, const void *pvBits, const char *pszForwarder, 114 PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser, PKLDRADDR puValue, uint32_t*pfKind);114 PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser, PKLDRADDR puValue, KU32 *pfKind); 115 115 static int kldrModPEDoFixups(PKLDRMODPE pModPE, void *pvMapping, KLDRADDR NewBaseAddress, KLDRADDR OldBaseAddress); 116 116 static int kldrModPEDoImports32Bit(PKLDRMODPE pModPE, void *pvMapping, const IMAGE_IMPORT_DESCRIPTOR *pImpDesc, … … 119 119 PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser); 120 120 static int kldrModPEDoImports(PKLDRMODPE pModPE, void *pvMapping, PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser); 121 static int kldrModPEDoCallDLL(PKLDRMODPE pModPE, unsigned uOp, uintptr_tuHandle);122 static int kldrModPEDoCallTLS(PKLDRMODPE pModPE, unsigned uOp, uintptr_tuHandle);123 static int32_t kldrModPEDoCall(uintptr_t uEntrypoint, uintptr_t uHandle, uint32_tuOp, void *pvReserved);121 static int kldrModPEDoCallDLL(PKLDRMODPE pModPE, unsigned uOp, KUPTR uHandle); 122 static int kldrModPEDoCallTLS(PKLDRMODPE pModPE, unsigned uOp, KUPTR uHandle); 123 static KI32 kldrModPEDoCall(KUPTR uEntrypoint, KUPTR uHandle, KU32 uOp, void *pvReserved); 124 124 125 125 … … 164 164 struct 165 165 { 166 uint32_tSignature;166 KU32 Signature; 167 167 IMAGE_FILE_HEADER FileHdr; 168 168 } s; 169 169 PKLDRMODPE pModPE; 170 170 PKLDRMOD pMod; 171 size_tcb;172 size_tcchFilename;171 KSIZE cb; 172 KSIZE cchFilename; 173 173 KLDRFOFF off; 174 uint32_ti;174 KU32 i; 175 175 int rc; 176 176 *ppModPE = NULL; … … 210 210 211 211 /* KLDRMOD */ 212 pMod = (PKLDRMOD)(( uint8_t*)pModPE + KLDR_ALIGN_Z(KLDR_OFFSETOF(KLDRMODPE, aShdrs[s.FileHdr.NumberOfSections]), 16));212 pMod = (PKLDRMOD)((KU8 *)pModPE + KLDR_ALIGN_Z(KLDR_OFFSETOF(KLDRMODPE, aShdrs[s.FileHdr.NumberOfSections]), 16)); 213 213 pMod->pvData = pModPE; 214 214 pMod->pRdr = pRdr; … … 253 253 pModPE->pvMapping = NULL; 254 254 pModPE->f32Reserved = 0; 255 pModPE->cImportModules = ~( uint32_t)0;255 pModPE->cImportModules = ~(KU32)0; 256 256 pModPE->offHdrs = offNewHdr >= 0 ? offNewHdr : 0; 257 257 pModPE->Hdrs.Signature = s.Signature; … … 432 432 IMAGE_OPTIONAL_HEADER32 volatile *pOptHdr32 = (IMAGE_OPTIONAL_HEADER32 volatile *)pOptHdr; 433 433 IMAGE_OPTIONAL_HEADER64 volatile *pOptHdr64 = pOptHdr; 434 uint32_t volatile*pu32Dst;435 uint32_t volatile*pu32Src;436 uint32_t volatile*pu32SrcLast;437 uint32_tu32;434 KU32 volatile *pu32Dst; 435 KU32 volatile *pu32Src; 436 KU32 volatile *pu32SrcLast; 437 KU32 u32; 438 438 439 439 /* From LoaderFlags and out the difference is 4 * 32-bits. */ 440 pu32Dst = ( uint32_t*)&pOptHdr64->DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] - 1;441 pu32Src = ( uint32_t*)&pOptHdr32->DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] - 1;442 pu32SrcLast = ( uint32_t*)&pOptHdr32->LoaderFlags;440 pu32Dst = (KU32 *)&pOptHdr64->DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] - 1; 441 pu32Src = (KU32 *)&pOptHdr32->DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] - 1; 442 pu32SrcLast = (KU32 *)&pOptHdr32->LoaderFlags; 443 443 while (pu32Src >= pu32SrcLast) 444 444 *pu32Dst-- = *pu32Src--; … … 472 472 IMAGE_LOAD_CONFIG_DIRECTORY32 volatile *pLoadCfg32 = (IMAGE_LOAD_CONFIG_DIRECTORY32 volatile *)pLoadCfg; 473 473 IMAGE_LOAD_CONFIG_DIRECTORY64 volatile *pLoadCfg64 = pLoadCfg; 474 uint32_tu32;474 KU32 u32; 475 475 476 476 pLoadCfg64->SEHandlerCount = pLoadCfg32->SEHandlerCount; … … 557 557 void *pvBase; 558 558 int rc; 559 uint32_ti;559 KU32 i; 560 560 561 561 /* … … 570 570 else 571 571 { 572 pvBase = (void *)( uintptr_t)pMod->aSegments[0].LinkAddress;573 if (( uintptr_t)pvBase != pMod->aSegments[0].LinkAddress)572 pvBase = (void *)(KUPTR)pMod->aSegments[0].LinkAddress; 573 if ((KUPTR)pvBase != pMod->aSegments[0].LinkAddress) 574 574 return KLDR_ERR_ADDRESS_OVERFLOW; 575 575 } … … 588 588 { 589 589 if (pMod->aSegments[i].RVA != NIL_KLDRADDR) 590 pMod->aSegments[i].MapAddress = ( uintptr_t)pvBase + (uintptr_t)pMod->aSegments[i].RVA;590 pMod->aSegments[i].MapAddress = (KUPTR)pvBase + (KUPTR)pMod->aSegments[i].RVA; 591 591 } 592 592 pModPE->pvMapping = pvBase; … … 612 612 PKLDRMOD pMod = pModPE->pMod; 613 613 int rc; 614 uint32_ti;614 KU32 i; 615 615 616 616 /* … … 690 690 691 691 /** @copydoc kLdrModQuerySymbol */ 692 static int kldrModPEQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_tiSymbol,693 const char *pchSymbol, size_tcchSymbol, const char *pszVersion,694 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t*pfKind)692 static int kldrModPEQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, KU32 iSymbol, 693 const char *pchSymbol, KSIZE cchSymbol, const char *pszVersion, 694 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, KU32 *pfKind) 695 695 696 696 { 697 697 PKLDRMODPE pModPE = (PKLDRMODPE)pMod->pvData; 698 const uint32_t*paExportRVAs;698 const KU32 *paExportRVAs; 699 699 const IMAGE_EXPORT_DIRECTORY *pExpDir; 700 uint32_tiExpOrd;701 uint32_tuRVA;700 KU32 iExpOrd; 701 KU32 uRVA; 702 702 int rc; 703 703 … … 732 732 * (The name table is sorted in ascending ordered by the linker.) 733 733 */ 734 const uint32_t *paRVANames = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfNames, const uint32_t*);735 const uint16_t *paOrdinals = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfNameOrdinals, const uint16_t*);736 int32_tiStart = 1; /* one based binary searching is simpler. */737 int32_tiEnd = pExpDir->NumberOfNames;734 const KU32 *paRVANames = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfNames, const KU32 *); 735 const KU16 *paOrdinals = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfNameOrdinals, const KU16 *); 736 KI32 iStart = 1; /* one based binary searching is simpler. */ 737 KI32 iEnd = pExpDir->NumberOfNames; 738 738 739 739 for (;;) 740 740 { 741 int32_ti;741 KI32 i; 742 742 int diff; 743 743 const char *pszName; … … 747 747 { 748 748 #ifdef KLDRMODPE_STRICT /* Make sure the linker and we both did our job right. */ 749 for (i = 0; i < ( int32_t)pExpDir->NumberOfNames; i++)749 for (i = 0; i < (KI32)pExpDir->NumberOfNames; i++) 750 750 751 751 { … … 778 778 * Lookup the address in the 'symbol' table. 779 779 */ 780 paExportRVAs = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfFunctions, const uint32_t*);780 paExportRVAs = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfFunctions, const KU32 *); 781 781 uRVA = paExportRVAs[iExpOrd]; 782 782 if ( uRVA - pModPE->Hdrs.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress … … 815 815 */ 816 816 static int kldrModPEDoForwarderQuery(PKLDRMODPE pModPE, const void *pvBits, const char *pszForwarder, 817 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t*pfKind)817 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, KU32 *pfKind) 818 818 { 819 819 const IMAGE_IMPORT_DESCRIPTOR *paImpDir; 820 uint32_tiImpModule;821 uint32_tcchImpModule;820 KU32 iImpModule; 821 KU32 cchImpModule; 822 822 const char *pszSymbol; 823 uint32_tiSymbol;823 KU32 iSymbol; 824 824 int rc; 825 825 … … 903 903 { 904 904 const char *pszName = KLDRMODPE_RVA2TYPE(pvBits, paImpDir[iImpModule].Name, const char *); 905 size_tcchName = kLdrHlpStrLen(pszName);905 KSIZE cchName = kLdrHlpStrLen(pszName); 906 906 if ( ( cchName == cchImpModule 907 907 || ( cchName > cchImpModule … … 930 930 /** @copydoc kLdrModEnumSymbols */ 931 931 static int kldrModPEEnumSymbols(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, 932 uint32_tfFlags, PFNKLDRMODENUMSYMS pfnCallback, void *pvUser)932 KU32 fFlags, PFNKLDRMODENUMSYMS pfnCallback, void *pvUser) 933 933 { 934 934 PKLDRMODPE pModPE = (PKLDRMODPE)pMod->pvData; 935 const uint32_t*paFunctions;935 const KU32 *paFunctions; 936 936 const IMAGE_EXPORT_DIRECTORY *pExpDir; 937 const uint32_t*paRVANames;938 const uint16_t*paOrdinals;939 uint32_tiFunction;940 uint32_tcFunctions;941 uint32_tcNames;937 const KU32 *paRVANames; 938 const KU16 *paOrdinals; 939 KU32 iFunction; 940 KU32 cFunctions; 941 KU32 cNames; 942 942 int rc; 943 943 … … 960 960 * Enumerate the ordinal exports. 961 961 */ 962 paRVANames = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfNames, const uint32_t*);963 paOrdinals = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfNameOrdinals, const uint16_t*);964 paFunctions = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfFunctions, const uint32_t*);962 paRVANames = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfNames, const KU32 *); 963 paOrdinals = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfNameOrdinals, const KU16 *); 964 paFunctions = KLDRMODPE_RVA2TYPE(pvBits, pExpDir->AddressOfFunctions, const KU32 *); 965 965 cFunctions = pExpDir->NumberOfFunctions; 966 966 cNames = pExpDir->NumberOfNames; … … 968 968 { 969 969 unsigned fFoundName; 970 uint32_tiName;971 const uint32_tuRVA = paFunctions[iFunction];970 KU32 iName; 971 const KU32 uRVA = paFunctions[iFunction]; 972 972 const KLDRADDR uValue = BaseAddress + uRVA; 973 uint32_tfKind = (pModPE->Hdrs.FileHeader.SizeOfOptionalHeader == sizeof(IMAGE_OPTIONAL_HEADER32)973 KU32 fKind = (pModPE->Hdrs.FileHeader.SizeOfOptionalHeader == sizeof(IMAGE_OPTIONAL_HEADER32) 974 974 ? KLDRSYMKIND_32BIT : KLDRSYMKIND_64BIT) 975 975 | KLDRSYMKIND_NO_TYPE; … … 1011 1011 1012 1012 /** @copydoc kLdrModGetImport */ 1013 static int kldrModPEGetImport(PKLDRMOD pMod, const void *pvBits, uint32_t iImport, char *pszName, size_tcchName)1013 static int kldrModPEGetImport(PKLDRMOD pMod, const void *pvBits, KU32 iImport, char *pszName, KSIZE cchName) 1014 1014 { 1015 1015 PKLDRMODPE pModPE = (PKLDRMODPE)pMod->pvData; 1016 1016 const IMAGE_IMPORT_DESCRIPTOR *pImpDesc; 1017 1017 const char *pszImportName; 1018 size_tcchImportName;1018 KSIZE cchImportName; 1019 1019 int rc; 1020 1020 … … 1029 1029 * Simple bounds check. 1030 1030 */ 1031 if (iImport >= ( uint32_t)kldrModPENumberOfImports(pMod, pvBits))1031 if (iImport >= (KU32)kldrModPENumberOfImports(pMod, pvBits)) 1032 1032 return KLDR_ERR_IMPORT_ORDINAL_OUT_OF_BOUNDS; 1033 1033 … … 1059 1059 1060 1060 /** @copydoc kLdrModNumberOfImports */ 1061 static int32_tkldrModPENumberOfImports(PKLDRMOD pMod, const void *pvBits)1061 static KI32 kldrModPENumberOfImports(PKLDRMOD pMod, const void *pvBits) 1062 1062 { 1063 1063 PKLDRMODPE pModPE = (PKLDRMODPE)pMod->pvData; 1064 if (pModPE->cImportModules == ~( uint32_t)0)1064 if (pModPE->cImportModules == ~(KU32)0) 1065 1065 { 1066 1066 /* … … 1131 1131 PKLDRMODPE pModPE = (PKLDRMODPE)pMod->pvData; 1132 1132 const IMAGE_DEBUG_DIRECTORY *pDbgDir; 1133 uint32_tiDbgInfo;1134 uint32_tcb;1133 KU32 iDbgInfo; 1134 KU32 cb; 1135 1135 int rc; 1136 1136 … … 1342 1342 * Apply base relocations. 1343 1343 */ 1344 rc = kldrModPEDoFixups(pModPE, (void *)pModPE->pvMapping, ( uintptr_t)pModPE->pvMapping,1344 rc = kldrModPEDoFixups(pModPE, (void *)pModPE->pvMapping, (KUPTR)pModPE->pvMapping, 1345 1345 pModPE->Hdrs.OptionalHeader.ImageBase); 1346 1346 … … 1373 1373 { 1374 1374 const KLDRADDR Delta = NewBaseAddress - OldBaseAddress; 1375 uint32_tcbLeft = pModPE->Hdrs.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;1375 KU32 cbLeft = pModPE->Hdrs.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size; 1376 1376 const IMAGE_BASE_RELOCATION *pBR, *pFirstBR; 1377 1377 … … 1396 1396 union 1397 1397 { 1398 uint8_t*pu8;1399 uint16_t*pu16;1400 uint32_t*pu32;1401 uint64_t*pu64;1398 KU8 *pu8; 1399 KU16 *pu16; 1400 KU32 *pu32; 1401 KU64 *pu64; 1402 1402 } uChunk, 1403 1403 u; 1404 const uint16_t *poffFixup = (const uint16_t*)(pBR + 1);1405 const uint32_tcbBlock = KLDR_MIN(cbLeft, pBR->SizeOfBlock) - sizeof(IMAGE_BASE_RELOCATION); /* more caution... */1406 uint32_tcFixups = cbBlock / sizeof(poffFixup[0]);1407 uChunk.pu8 = KLDRMODPE_RVA2TYPE(pvMapping, pBR->VirtualAddress, uint8_t*);1404 const KU16 *poffFixup = (const KU16 *)(pBR + 1); 1405 const KU32 cbBlock = KLDR_MIN(cbLeft, pBR->SizeOfBlock) - sizeof(IMAGE_BASE_RELOCATION); /* more caution... */ 1406 KU32 cFixups = cbBlock / sizeof(poffFixup[0]); 1407 uChunk.pu8 = KLDRMODPE_RVA2TYPE(pvMapping, pBR->VirtualAddress, KU8 *); 1408 1408 1409 1409 /* … … 1421 1421 /* 1 - 16-bit, add 2nd 16-bit part of the delta. (rare) */ 1422 1422 case IMAGE_REL_BASED_HIGH: 1423 *u.pu16 += ( uint16_t)(Delta >> 16);1423 *u.pu16 += (KU16)(Delta >> 16); 1424 1424 break; 1425 1425 1426 1426 /* 2 - 16-bit, add 1st 16-bit part of the delta. (rare) */ 1427 1427 case IMAGE_REL_BASED_LOW: 1428 *u.pu16 += ( uint16_t)Delta;1428 *u.pu16 += (KU16)Delta; 1429 1429 break; 1430 1430 1431 1431 /* 3 - 32-bit, add delta. (frequent in 32-bit images) */ 1432 1432 case IMAGE_REL_BASED_HIGHLOW: 1433 *u.pu32 += ( uint32_t)Delta;1433 *u.pu32 += (KU32)Delta; 1434 1434 break; 1435 1435 … … 1437 1437 case IMAGE_REL_BASED_HIGHADJ: 1438 1438 { 1439 int32_ti32;1439 KI32 i32; 1440 1440 if (cFixups <= 1) 1441 1441 return KLDR_ERR_PE_BAD_FIXUP; 1442 1442 1443 i32 = ( uint32_t)*u.pu16 << 16;1443 i32 = (KU32)*u.pu16 << 16; 1444 1444 i32 |= *++poffFixup; cFixups--; /* the addend argument */ 1445 i32 += ( uint32_t)Delta;1445 i32 += (KU32)Delta; 1446 1446 i32 += 0x8000; 1447 *u.pu16 = ( uint16_t)(i32 >> 16);1447 *u.pu16 = (KU16)(i32 >> 16); 1448 1448 break; 1449 1449 } … … 1452 1452 case IMAGE_REL_BASED_MIPS_JMPADDR: 1453 1453 *u.pu32 = (*u.pu32 & 0xc0000000) 1454 | (( uint32_t)((*u.pu32 << 2) + (uint32_t)Delta) >> 2);1454 | ((KU32)((*u.pu32 << 2) + (KU32)Delta) >> 2); 1455 1455 break; 1456 1456 … … 1478 1478 /* 10 - 64-bit, add delta. (frequently in 64-bit images) */ 1479 1479 case IMAGE_REL_BASED_DIR64: 1480 *u.pu64 += ( uint64_t)Delta;1480 *u.pu64 += (KU64)Delta; 1481 1481 break; 1482 1482 … … 1484 1484 case IMAGE_REL_BASED_HIGH3ADJ: 1485 1485 { 1486 int64_ti64;1486 KI64 i64; 1487 1487 if (cFixups <= 2) 1488 1488 return KLDR_ERR_PE_BAD_FIXUP; 1489 1489 1490 i64 = ( uint64_t)*u.pu16 << 321491 | (( uint32_t)poffFixup[2] << 16)1490 i64 = (KU64)*u.pu16 << 32 1491 | ((KU32)poffFixup[2] << 16) 1492 1492 | poffFixup[1]; 1493 1493 i64 += Delta; 1494 1494 i64 += 0x80008000UL; 1495 *u.pu16 = ( uint16_t)(i64 >> 32);1495 *u.pu16 = (KU16)(i64 >> 32); 1496 1496 /* skip the addends arguments */ 1497 1497 poffFixup += 2; … … 1517 1517 */ 1518 1518 cbLeft -= pBR->SizeOfBlock; 1519 pBR = (PIMAGE_BASE_RELOCATION)(( uintptr_t)pBR + pBR->SizeOfBlock);1519 pBR = (PIMAGE_BASE_RELOCATION)((KUPTR)pBR + pBR->SizeOfBlock); 1520 1520 } 1521 1521 … … 1568 1568 { 1569 1569 PKLDRMOD pMod = pModPE->pMod; 1570 uint32_tiImp;1570 KU32 iImp; 1571 1571 1572 1572 /* … … 1584 1584 { 1585 1585 KLDRADDR Value; 1586 uint32_tfKind = KLDRSYMKIND_REQ_FLAT;1586 KU32 fKind = KLDRSYMKIND_REQ_FLAT; 1587 1587 int rc; 1588 1588 … … 1605 1605 1606 1606 /* Apply it. */ 1607 pFirstThunk->u1.Function = ( uint32_t)Value;1607 pFirstThunk->u1.Function = (KU32)Value; 1608 1608 if (pFirstThunk->u1.Function != Value) 1609 1609 { … … 1636 1636 { 1637 1637 PKLDRMOD pMod = pModPE->pMod; 1638 uint32_tiImp;1638 KU32 iImp; 1639 1639 1640 1640 /* … … 1652 1652 { 1653 1653 KLDRADDR Value; 1654 uint32_tfKind = KLDRSYMKIND_REQ_FLAT;1654 KU32 fKind = KLDRSYMKIND_REQ_FLAT; 1655 1655 int rc; 1656 1656 1657 1657 /* Ordinal or name import? */ 1658 1658 if (IMAGE_SNAP_BY_ORDINAL64(pThunk->u1.Ordinal)) 1659 rc = pfnGetImport(pMod, iImp, ( uint32_t)IMAGE_ORDINAL64(pThunk->u1.Ordinal), NULL, 0, NULL, &Value, &fKind, pvUser);1659 rc = pfnGetImport(pMod, iImp, (KU32)IMAGE_ORDINAL64(pThunk->u1.Ordinal), NULL, 0, NULL, &Value, &fKind, pvUser); 1660 1660 else if (KLDRMODPE_VALID_RVA(pModPE, pThunk->u1.Ordinal)) 1661 1661 { … … 1687 1687 1688 1688 /** @copydoc kLdrModCallInit */ 1689 static int kldrModPECallInit(PKLDRMOD pMod, uintptr_tuHandle)1689 static int kldrModPECallInit(PKLDRMOD pMod, KUPTR uHandle) 1690 1690 { 1691 1691 PKLDRMODPE pModPE = (PKLDRMODPE)pMod->pvData; … … 1723 1723 * @param uHandle The module handle to present. 1724 1724 */ 1725 static int kldrModPEDoCallDLL(PKLDRMODPE pModPE, unsigned uOp, uintptr_tuHandle)1725 static int kldrModPEDoCallDLL(PKLDRMODPE pModPE, unsigned uOp, KUPTR uHandle) 1726 1726 { 1727 1727 int rc; … … 1736 1736 * Invoke the entrypoint and convert the boolean result to a kLdr status code. 1737 1737 */ 1738 rc = kldrModPEDoCall(( uintptr_t)pModPE->pvMapping + pModPE->Hdrs.OptionalHeader.AddressOfEntryPoint,1738 rc = kldrModPEDoCall((KUPTR)pModPE->pvMapping + pModPE->Hdrs.OptionalHeader.AddressOfEntryPoint, 1739 1739 uHandle, uOp, NULL); 1740 1740 if (rc) … … 1759 1759 * @param uHandle The module handle to present. 1760 1760 */ 1761 static int kldrModPEDoCallTLS(PKLDRMODPE pModPE, unsigned uOp, uintptr_tuHandle)1761 static int kldrModPEDoCallTLS(PKLDRMODPE pModPE, unsigned uOp, KUPTR uHandle) 1762 1762 { 1763 1763 /** @todo implement TLS support. */ … … 1775 1775 * @param pvReserved The third argument, reserved argument. (figure this one out) 1776 1776 */ 1777 static int32_t kldrModPEDoCall(uintptr_t uEntrypoint, uintptr_t uHandle, uint32_tuOp, void *pvReserved)1778 { 1779 int32_trc;1777 static KI32 kldrModPEDoCall(KUPTR uEntrypoint, KUPTR uHandle, KU32 uOp, void *pvReserved) 1778 { 1779 KI32 rc; 1780 1780 1781 1781 /** @todo try/except */ … … 1823 1823 */ 1824 1824 /** @todo Deal with GCC / MSC differences in some sensible way. */ 1825 int (*pfn)( uintptr_t uHandle, uint32_tuOp, void *pvReserved);1826 pfn = (int (*)( uintptr_t uHandle, uint32_tuOp, void *pvReserved))uEntrypoint;1825 int (*pfn)(KUPTR uHandle, KU32 uOp, void *pvReserved); 1826 pfn = (int (*)(KUPTR uHandle, KU32 uOp, void *pvReserved))uEntrypoint; 1827 1827 rc = pfn(uHandle, uOp, NULL); 1828 1828 … … 1836 1836 1837 1837 /** @copydoc kLdrModCallTerm */ 1838 static int kldrModPECallTerm(PKLDRMOD pMod, uintptr_tuHandle)1838 static int kldrModPECallTerm(PKLDRMOD pMod, KUPTR uHandle) 1839 1839 { 1840 1840 PKLDRMODPE pModPE = (PKLDRMODPE)pMod->pvData; … … 1858 1858 1859 1859 /** @copydoc kLdrModCallThread */ 1860 static int kldrModPECallThread(PKLDRMOD pMod, uintptr_tuHandle, unsigned fAttachingOrDetaching)1860 static int kldrModPECallThread(PKLDRMOD pMod, KUPTR uHandle, unsigned fAttachingOrDetaching) 1861 1861 { 1862 1862 PKLDRMODPE pModPE = (PKLDRMODPE)pMod->pvData; … … 1896 1896 { 1897 1897 PKLDRMODPE pModPE = (PKLDRMODPE)pMod->pvData; 1898 uint32_ti;1898 KU32 i; 1899 1899 int rc; 1900 1900 … … 1916 1916 continue; 1917 1917 rc = kLdrRdrRead(pMod->pRdr, 1918 ( uint8_t*)pvBits + (pMod->aSegments[i].LinkAddress - pModPE->Hdrs.OptionalHeader.ImageBase),1918 (KU8 *)pvBits + (pMod->aSegments[i].LinkAddress - pModPE->Hdrs.OptionalHeader.ImageBase), 1919 1919 pMod->aSegments[i].cbFile, 1920 1920 pMod->aSegments[i].offFile);
Note:
See TracChangeset
for help on using the changeset viewer.