Changeset 3567 for trunk/kStuff/kLdr/kLdrModMachO.c
- Timestamp:
- Aug 27, 2007, 9:54:05 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kStuff/kLdr/kLdrModMachO.c
r3537 r3567 70 70 KLDRFOFF offFile; 71 71 /** The number of fixups. */ 72 uint32_tcFixups;72 KU32 cFixups; 73 73 /** The array of fixups. (lazy loaded) */ 74 74 macho_relocation_info_t *paFixups; … … 77 77 KLDRFOFF offFixups; 78 78 /** Mach-O section flags. */ 79 uint32_tfFlags;79 KU32 fFlags; 80 80 /** kLdr segment index. */ 81 uint32_tiSegment;81 KU32 iSegment; 82 82 /** Pointer to the Mach-O section structure. */ 83 83 void *pvMachoSection; … … 92 92 { 93 93 /** The number of sections in the segment. */ 94 uint32_tcSections;94 KU32 cSections; 95 95 /** Pointer to the sections belonging to this segment. 96 96 * The array resides in the big memory chunk allocated for … … 122 122 123 123 /** Pointer to the load commands. (endian converted) */ 124 uint8_t*pbLoadCommands;124 KU8 *pbLoadCommands; 125 125 /** The Mach-O header. (endian converted) 126 126 * @remark The reserved field is only valid for real 64-bit headers. */ … … 130 130 KLDRFOFF offSymbols; 131 131 /** The number of symbols. */ 132 uint32_tcSymbols;132 KU32 cSymbols; 133 133 /** The pointer to the loaded symbol table. */ 134 134 void *pvaSymbols; … … 136 136 KLDRFOFF offStrings; 137 137 /** The size of the of the string table. */ 138 uint32_tcchStrings;138 KU32 cchStrings; 139 139 /** Pointer to the loaded string table. */ 140 140 char *pchStrings; 141 141 142 142 /** The number of sections. */ 143 uint32_tcSections;143 KU32 cSections; 144 144 /** Pointer to the section array running in parallel to the Mach-O one. */ 145 145 PKLDRMODMACHOSECT paSections; … … 155 155 *******************************************************************************/ 156 156 #if 0 157 static int32_tkldrModMachONumberOfImports(PKLDRMOD pMod, const void *pvBits);157 static KI32 kldrModMachONumberOfImports(PKLDRMOD pMod, const void *pvBits); 158 158 #endif 159 159 static int kldrModMachORelocateBits(PKLDRMOD pMod, void *pvBits, KLDRADDR NewBaseAddress, KLDRADDR OldBaseAddress, … … 161 161 162 162 static int kldrModMachODoCreate(PKLDRRDR pRdr, PKLDRMODMACHO *ppMod); 163 static int kldrModMachOPreParseLoadCommands( uint8_t*pbLoadCommands, const mach_header_32_t *pHdr, PKLDRRDR pRdr,164 uint32_t *pcSegments, uint32_t *pcSections, uint32_t*pcbStringPool);165 static int kldrModMachOParseLoadCommands(PKLDRMODMACHO pModMachO, char *pbStringPool, uint32_tcbStringPool);163 static int kldrModMachOPreParseLoadCommands(KU8 *pbLoadCommands, const mach_header_32_t *pHdr, PKLDRRDR pRdr, 164 KU32 *pcSegments, KU32 *pcSections, KU32 *pcbStringPool); 165 static int kldrModMachOParseLoadCommands(PKLDRMODMACHO pModMachO, char *pbStringPool, KU32 cbStringPool); 166 166 static int kldrModMachOAdjustBaseAddress(PKLDRMODMACHO pModMachO, PKLDRADDR pBaseAddress); 167 167 168 168 /*static int kldrModMachOLoadLoadCommands(PKLDRMODMACHO pModMachO);*/ 169 169 static int kldrModMachOLoadObjSymTab(PKLDRMODMACHO pModMachO); 170 static int kldrModMachOLoadFixups(PKLDRMODMACHO pModMachO, KLDRFOFF offFixups, uint32_tcFixups, macho_relocation_info_t **ppaFixups);170 static int kldrModMachOLoadFixups(PKLDRMODMACHO pModMachO, KLDRFOFF offFixups, KU32 cFixups, macho_relocation_info_t **ppaFixups); 171 171 static int kldrModMachOMapVirginBits(PKLDRMODMACHO pModMachO); 172 172 173 static int kldrModMachODoQuerySymbol32Bit(PKLDRMODMACHO pModMachO, const macho_nlist_32_t *paSyms, uint32_tcSyms, const char *pchStrings,174 uint32_t cchStrings, KLDRADDR BaseAddress, uint32_tiSymbol, const char *pchSymbol,175 size_t cchSymbol, PKLDRADDR puValue, uint32_t*pfKind);176 static int kldrModMachODoEnumSymbols32Bit(PKLDRMODMACHO pModMachO, const macho_nlist_32_t *paSyms, uint32_tcSyms,177 const char *pchStrings, uint32_tcchStrings, KLDRADDR BaseAddress,178 uint32_tfFlags, PFNKLDRMODENUMSYMS pfnCallback, void *pvUser);173 static int kldrModMachODoQuerySymbol32Bit(PKLDRMODMACHO pModMachO, const macho_nlist_32_t *paSyms, KU32 cSyms, const char *pchStrings, 174 KU32 cchStrings, KLDRADDR BaseAddress, KU32 iSymbol, const char *pchSymbol, 175 KSIZE cchSymbol, PKLDRADDR puValue, KU32 *pfKind); 176 static int kldrModMachODoEnumSymbols32Bit(PKLDRMODMACHO pModMachO, const macho_nlist_32_t *paSyms, KU32 cSyms, 177 const char *pchStrings, KU32 cchStrings, KLDRADDR BaseAddress, 178 KU32 fFlags, PFNKLDRMODENUMSYMS pfnCallback, void *pvUser); 179 179 static int kldrModMachOObjDoImports(PKLDRMODMACHO pModMachO, PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser); 180 180 static int kldrModMachOObjDoFixups(PKLDRMODMACHO pModMachO, void *pvMapping, KLDRADDR NewBaseAddress); 181 static int kldrModMachOFixupSectionGeneric32Bit(PKLDRMODMACHO pModMachO, uint8_t*pbSectBits, PKLDRMODMACHOSECT pFixupSect,182 macho_nlist_32_t *paSyms, uint32_tcSyms, KLDRADDR NewBaseAddress);181 static int kldrModMachOFixupSectionGeneric32Bit(PKLDRMODMACHO pModMachO, KU8 *pbSectBits, PKLDRMODMACHOSECT pFixupSect, 182 macho_nlist_32_t *paSyms, KU32 cSyms, KLDRADDR NewBaseAddress); 183 183 184 184 /*static int kldrModMachODoFixups(PKLDRMODMACHO pModMachO, void *pvMapping, KLDRADDR NewBaseAddress, KLDRADDR OldBaseAddress); … … 235 235 PKLDRMODMACHO pModMachO; 236 236 PKLDRMOD pMod; 237 uint8_t*pbLoadCommands;238 uint32_tcSegments;239 uint32_tcSections;240 uint32_tcbStringPool;241 size_tcchFilename;242 size_tcb;237 KU8 *pbLoadCommands; 238 KU32 cSegments; 239 KU32 cSections; 240 KU32 cbStringPool; 241 KSIZE cchFilename; 242 KSIZE cb; 243 243 int rc; 244 244 *ppModMachO = NULL; … … 311 311 312 312 /* KLDRMOD */ 313 pMod = (PKLDRMOD)(( uint8_t*)pModMachO + KLDR_ALIGN_Z( KLDR_OFFSETOF(KLDRMODMACHO, aSegments[cSegments])314 313 pMod = (PKLDRMOD)((KU8 *)pModMachO + KLDR_ALIGN_Z( KLDR_OFFSETOF(KLDRMODMACHO, aSegments[cSegments]) 314 + sizeof(KLDRMODMACHOSECT) * cSections, 16)); 315 315 pMod->pvData = pModMachO; 316 316 pMod->pRdr = pRdr; … … 430 430 * @param pcbStringPool Where to store the string pool size. 431 431 */ 432 static int kldrModMachOPreParseLoadCommands( uint8_t*pbLoadCommands, const mach_header_32_t *pHdr, PKLDRRDR pRdr,433 uint32_t *pcSegments, uint32_t *pcSections, uint32_t*pcbStringPool)432 static int kldrModMachOPreParseLoadCommands(KU8 *pbLoadCommands, const mach_header_32_t *pHdr, PKLDRRDR pRdr, 433 KU32 *pcSegments, KU32 *pcSections, KU32 *pcbStringPool) 434 434 { 435 435 union 436 436 { 437 uint8_t*pb;437 KU8 *pb; 438 438 load_command_t *pLoadCmd; 439 439 segment_command_32_t *pSeg32; … … 443 443 uuid_command_t *pUuid; 444 444 } u; 445 const uint64_tcbFile = kLdrRdrSize(pRdr);446 uint32_tcSegments = 0;447 uint32_tcSections = 0;448 uint32_tcbStringPool = 0;449 uint32_tcLeft = pHdr->ncmds;450 uint32_tcbLeft = pHdr->sizeofcmds;451 uint8_t*pb = pbLoadCommands;445 const KU64 cbFile = kLdrRdrSize(pRdr); 446 KU32 cSegments = 0; 447 KU32 cSections = 0; 448 KU32 cbStringPool = 0; 449 KU32 cLeft = pHdr->ncmds; 450 KU32 cbLeft = pHdr->sizeofcmds; 451 KU8 *pb = pbLoadCommands; 452 452 int cSegmentCommands = 0; 453 453 int cSymbolTabs = 0; … … 487 487 section_32_t *pSect; 488 488 section_32_t *pFirstSect; 489 uint32_tcSectionsLeft;489 KU32 cSectionsLeft; 490 490 491 491 /* convert and verify*/ … … 509 509 if ( u.pSeg32->filesize 510 510 && ( u.pSeg32->fileoff > cbFile 511 || ( uint64_t)u.pSeg32->fileoff + u.pSeg32->filesize > cbFile))511 || (KU64)u.pSeg32->fileoff + u.pSeg32->filesize > cbFile)) 512 512 return KLDR_ERR_MACHO_BAD_LOAD_COMMAND; 513 513 if (!u.pSeg32->filesize && u.pSeg32->fileoff) … … 594 594 if ( fFileBits 595 595 && ( pSect->offset > cbFile 596 || ( uint64_t)pSect->offset + pSect->size > cbFile))596 || (KU64)pSect->offset + pSect->size > cbFile)) 597 597 return KLDR_ERR_MACHO_BAD_SECTION; 598 598 if (!fFileBits && pSect->offset) … … 602 602 if ( pSect->nreloc 603 603 && ( pSect->reloff > cbFile 604 || ( uint64_t)pSect->reloff + (KLDRFOFF)pSect->nreloc * sizeof(macho_relocation_info_t)) > cbFile)604 || (KU64)pSect->reloff + (KLDRFOFF)pSect->nreloc * sizeof(macho_relocation_info_t)) > cbFile) 605 605 return KLDR_ERR_MACHO_BAD_SECTION; 606 606 … … 624 624 /* verify that the linker/assembler has ordered sections correctly. */ 625 625 section_32_t *pCur = (pSect - 2); 626 while (( uintptr_t)pCur >= (uintptr_t)pFirstSect)626 while ((KUPTR)pCur >= (KUPTR)pFirstSect) 627 627 { 628 628 if (!kLdrHlpStrNComp(pCur->segname, pSect->segname, sizeof(pSect->segname))) … … 656 656 case LC_SYMTAB: 657 657 { 658 size_tcbSym;658 KSIZE cbSym; 659 659 if (fConvertEndian) 660 660 { … … 671 671 : sizeof(macho_nlist_64_t); 672 672 if ( u.pSymTab->symoff >= cbFile 673 || ( uint64_t)u.pSymTab->symoff + u.pSymTab->nsyms * cbSym > kLdrRdrSize(pRdr))673 || (KU64)u.pSymTab->symoff + u.pSymTab->nsyms * cbSym > kLdrRdrSize(pRdr)) 674 674 return KLDR_ERR_MACHO_BAD_LOAD_COMMAND; 675 675 if ( u.pSymTab->stroff >= cbFile 676 || ( uint64_t)u.pSymTab->stroff + u.pSymTab->strsize > cbFile)676 || (KU64)u.pSymTab->stroff + u.pSymTab->strsize > cbFile) 677 677 return KLDR_ERR_MACHO_BAD_LOAD_COMMAND; 678 678 … … 692 692 case LC_UNIXTHREAD: 693 693 { 694 uint32_t *pu32 = (uint32_t*)(u.pb + sizeof(load_command_t));695 uint32_t cItemsLeft = (u.pThread->cmdsize - sizeof(load_command_t)) / sizeof(uint32_t);694 KU32 *pu32 = (KU32 *)(u.pb + sizeof(load_command_t)); 695 KU32 cItemsLeft = (u.pThread->cmdsize - sizeof(load_command_t)) / sizeof(KU32); 696 696 while (cItemsLeft) 697 697 { 698 /* convert & verify header items ([0] == flavor, [1] == uint32_tcount). */698 /* convert & verify header items ([0] == flavor, [1] == KU32 count). */ 699 699 if (cItemsLeft < 2) 700 700 return KLDR_ERR_MACHO_BAD_LOAD_COMMAND; … … 787 787 * @param cbStringPool The size of the string pool. 788 788 */ 789 static int kldrModMachOParseLoadCommands(PKLDRMODMACHO pModMachO, char *pbStringPool, uint32_tcbStringPool)789 static int kldrModMachOParseLoadCommands(PKLDRMODMACHO pModMachO, char *pbStringPool, KU32 cbStringPool) 790 790 { 791 791 union 792 792 { 793 const uint8_t*pb;793 const KU8 *pb; 794 794 const load_command_t *pLoadCmd; 795 795 const segment_command_32_t *pSeg32; … … 797 797 const symtab_command_t *pSymTab; 798 798 } u; 799 uint32_tcLeft = pModMachO->Hdr.ncmds;800 uint32_tcbLeft = pModMachO->Hdr.sizeofcmds;801 const uint8_t*pb = pModMachO->pbLoadCommands;799 KU32 cLeft = pModMachO->Hdr.ncmds; 800 KU32 cbLeft = pModMachO->Hdr.sizeofcmds; 801 const KU8 *pb = pModMachO->pbLoadCommands; 802 802 int fFirstSegment = 1; 803 803 PKLDRSEG pSeg = &pModMachO->pMod->aSegments[0]; 804 804 PKLDRMODMACHOSEG pSegExtra = &pModMachO->aSegments[0]; 805 805 PKLDRMODMACHOSECT pSectExtra = pModMachO->paSections; 806 const uint32_tcSegments = pModMachO->pMod->cSegments;807 uint32_ti;806 const KU32 cSegments = pModMachO->pMod->cSegments; 807 KU32 i; 808 808 809 809 while (cLeft-- > 0) … … 822 822 section_32_t *pSect; 823 823 section_32_t *pFirstSect; 824 uint32_tcSectionsLeft;824 KU32 cSectionsLeft; 825 825 826 826 pModMachO->LinkAddress = u.pSeg32->vmaddr; … … 867 867 pSeg->pvUser = NULL; 868 868 pSeg->pchName = pbStringPool; 869 pSeg->cchName = ( uint32_t)kLdrHlpStrNLen(&pSect->segname[0], sizeof(pSect->sectname));869 pSeg->cchName = (KU32)kLdrHlpStrNLen(&pSect->segname[0], sizeof(pSect->sectname)); 870 870 kLdrHlpMemCopy(pbStringPool, &pSect->segname[0], pSeg->cchName); 871 871 pbStringPool += pSeg->cchName; … … 967 967 { 968 968 KLDRADDR cb1; 969 size_tcb2;969 KSIZE cb2; 970 970 971 971 for (i = 0; i < cSegments - 1; i++) 972 972 { 973 973 cb1 = pSeg[i + 1].LinkAddress - pSeg[i].LinkAddress; 974 cb2 = ( size_t)cb1;975 pSeg[i].cbMapped = cb2 == cb1 ? cb2 : ~( size_t)0;974 cb2 = (KSIZE)cb1; 975 pSeg[i].cbMapped = cb2 == cb1 ? cb2 : ~(KSIZE)0; 976 976 } 977 977 cb1 = KLDR_ALIGN_ADDR(pSeg[i].cb, pSeg[i].Alignment); 978 cb2 = ( size_t)cb1;979 pSeg[i].cbMapped = cb2 == cb1 ? cb2 : ~( size_t)0;978 cb2 = (KSIZE)cb1; 979 pSeg[i].cbMapped = cb2 == cb1 ? cb2 : ~(KSIZE)0; 980 980 981 981 pModMachO->cbImage = pSeg[i].RVA + cb1; … … 993 993 PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData; 994 994 int rc = 0; 995 uint32_ti, j;995 KU32 i, j; 996 996 KLDRMODMACHO_ASSERT(!pModMachO->pvMapping); 997 997 … … 1049 1049 1050 1050 /** @copydoc kLdrModQuerySymbol */ 1051 static int kldrModMachOQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_tiSymbol,1052 const char *pchSymbol, size_tcchSymbol, const char *pszVersion,1053 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t*pfKind)1051 static int kldrModMachOQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, KU32 iSymbol, 1052 const char *pchSymbol, KSIZE cchSymbol, const char *pszVersion, 1053 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, KU32 *pfKind) 1054 1054 { 1055 1055 PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData; … … 1115 1115 * @param pfKind See kLdrModQuerySymbol. 1116 1116 */ 1117 static int kldrModMachODoQuerySymbol32Bit(PKLDRMODMACHO pModMachO, const macho_nlist_32_t *paSyms, uint32_tcSyms, const char *pchStrings,1118 uint32_t cchStrings, KLDRADDR BaseAddress, uint32_t iSymbol, const char *pchSymbol, size_tcchSymbol,1119 PKLDRADDR puValue, uint32_t*pfKind)1117 static int kldrModMachODoQuerySymbol32Bit(PKLDRMODMACHO pModMachO, const macho_nlist_32_t *paSyms, KU32 cSyms, const char *pchStrings, 1118 KU32 cchStrings, KLDRADDR BaseAddress, KU32 iSymbol, const char *pchSymbol, KSIZE cchSymbol, 1119 PKLDRADDR puValue, KU32 *pfKind) 1120 1120 { 1121 1121 /* … … 1130 1130 1131 1131 /* external symbols are usually at the end, so search the other way. */ 1132 for (iSymbol = cSyms - 1; iSymbol != UINT32_MAX; iSymbol--)1132 for (iSymbol = cSyms - 1; iSymbol != KU32_MAX; iSymbol--) 1133 1133 { 1134 1134 const char *psz; … … 1147 1147 if (!paSyms[iSymbol].n_un.n_strx) 1148 1148 continue; 1149 if (( uint32_t)paSyms[iSymbol].n_un.n_strx >= cchStrings)1149 if ((KU32)paSyms[iSymbol].n_un.n_strx >= cchStrings) 1150 1150 continue; 1151 1151 psz = &pchStrings[paSyms[iSymbol].n_un.n_strx]; … … 1158 1158 break; 1159 1159 } 1160 if (iSymbol == UINT32_MAX)1160 if (iSymbol == KU32_MAX) 1161 1161 return KLDR_ERR_SYMBOL_NOT_FOUND; 1162 1162 } … … 1191 1191 PKLDRMODMACHOSECT pSect; 1192 1192 KLDRADDR RVA; 1193 if (( uint32_t)(paSyms[iSymbol].n_sect - 1) >= pModMachO->cSections)1193 if ((KU32)(paSyms[iSymbol].n_sect - 1) >= pModMachO->cSections) 1194 1194 return KLDR_ERR_MACHO_BAD_SYMBOL; 1195 1195 pSect = &pModMachO->paSections[paSyms[iSymbol].n_sect - 1]; … … 1228 1228 /** @copydoc kLdrModEnumSymbols */ 1229 1229 static int kldrModMachOEnumSymbols(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, 1230 uint32_tfFlags, PFNKLDRMODENUMSYMS pfnCallback, void *pvUser)1230 KU32 fFlags, PFNKLDRMODENUMSYMS pfnCallback, void *pvUser) 1231 1231 { 1232 1232 PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData; … … 1280 1280 * @param pvUser See kLdrModEnumSymbols. 1281 1281 */ 1282 static int kldrModMachODoEnumSymbols32Bit(PKLDRMODMACHO pModMachO, const macho_nlist_32_t *paSyms, uint32_tcSyms,1283 const char *pchStrings, uint32_tcchStrings, KLDRADDR BaseAddress,1284 uint32_tfFlags, PFNKLDRMODENUMSYMS pfnCallback, void *pvUser)1285 { 1286 const uint32_tfKindBase = pModMachO->Hdr.magic == IMAGE_MACHO32_SIGNATURE1282 static int kldrModMachODoEnumSymbols32Bit(PKLDRMODMACHO pModMachO, const macho_nlist_32_t *paSyms, KU32 cSyms, 1283 const char *pchStrings, KU32 cchStrings, KLDRADDR BaseAddress, 1284 KU32 fFlags, PFNKLDRMODENUMSYMS pfnCallback, void *pvUser) 1285 { 1286 const KU32 fKindBase = pModMachO->Hdr.magic == IMAGE_MACHO32_SIGNATURE 1287 1287 || pModMachO->Hdr.magic == IMAGE_MACHO32_SIGNATURE_OE 1288 1288 ? KLDRSYMKIND_32BIT : KLDRSYMKIND_64BIT; 1289 uint32_tiSym;1289 KU32 iSym; 1290 1290 int rc; 1291 1291 … … 1295 1295 for (iSym = 0; iSym < cSyms; iSym++) 1296 1296 { 1297 uint32_tfKind;1297 KU32 fKind; 1298 1298 KLDRADDR uValue; 1299 1299 const char *psz; 1300 size_tcch;1300 KSIZE cch; 1301 1301 1302 1302 /* Skip debug symbols and undefined symbols. */ … … 1322 1322 1323 1323 /* name */ 1324 if (( uint32_t)paSyms[iSym].n_un.n_strx >= cchStrings)1324 if ((KU32)paSyms[iSym].n_un.n_strx >= cchStrings) 1325 1325 return KLDR_ERR_MACHO_BAD_SYMBOL; 1326 1326 psz = &pchStrings[paSyms[iSym].n_un.n_strx]; … … 1338 1338 { 1339 1339 PKLDRMODMACHOSECT pSect; 1340 if (( uint32_t)(paSyms[iSym].n_sect - 1) >= pModMachO->cSections)1340 if ((KU32)(paSyms[iSym].n_sect - 1) >= pModMachO->cSections) 1341 1341 return KLDR_ERR_MACHO_BAD_SYMBOL; 1342 1342 pSect = &pModMachO->paSections[paSyms[iSym].n_sect - 1]; … … 1379 1379 1380 1380 /** @copydoc kLdrModGetImport */ 1381 static int kldrModMachOGetImport(PKLDRMOD pMod, const void *pvBits, uint32_t iImport, char *pszName, size_tcchName)1381 static int kldrModMachOGetImport(PKLDRMOD pMod, const void *pvBits, KU32 iImport, char *pszName, KSIZE cchName) 1382 1382 { 1383 1383 PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData; … … 1391 1391 1392 1392 /** @copydoc kLdrModNumberOfImports */ 1393 static int32_tkldrModMachONumberOfImports(PKLDRMOD pMod, const void *pvBits)1393 static KI32 kldrModMachONumberOfImports(PKLDRMOD pMod, const void *pvBits) 1394 1394 { 1395 1395 PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData; … … 1449 1449 PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData; 1450 1450 const IMAGE_DEBUG_DIRECTORY *pDbgDir; 1451 uint32_tiDbgInfo;1452 uint32_tcb;1451 KU32 iDbgInfo; 1452 KU32 cb; 1453 1453 int rc; 1454 1454 … … 1543 1543 PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData; 1544 1544 unsigned fFixed; 1545 uint32_ti;1545 KU32 i; 1546 1546 void *pvBase; 1547 1547 int rc; … … 1563 1563 else 1564 1564 { 1565 pvBase = (void *)( uintptr_t)pMod->aSegments[0].LinkAddress;1566 if (( uintptr_t)pvBase != pMod->aSegments[0].LinkAddress)1565 pvBase = (void *)(KUPTR)pMod->aSegments[0].LinkAddress; 1566 if ((KUPTR)pvBase != pMod->aSegments[0].LinkAddress) 1567 1567 return KLDR_ERR_ADDRESS_OVERFLOW; 1568 1568 } … … 1584 1584 { 1585 1585 if (pMod->aSegments[i].RVA != NIL_KLDRADDR) 1586 pMod->aSegments[i].MapAddress = ( uintptr_t)pvBase + (uintptr_t)pMod->aSegments[i].RVA;1586 pMod->aSegments[i].MapAddress = (KUPTR)pvBase + (KUPTR)pMod->aSegments[i].RVA; 1587 1587 } 1588 1588 pModMachO->pvMapping = pvBase; … … 1596 1596 { 1597 1597 PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData; 1598 uint32_ti;1598 KU32 i; 1599 1599 int rc; 1600 1600 … … 1691 1691 * Resolve imports and apply base relocations. 1692 1692 */ 1693 rc = kldrModMachORelocateBits(pMod, pModMachO->pvMapping, ( uintptr_t)pModMachO->pvMapping, pModMachO->LinkAddress,1693 rc = kldrModMachORelocateBits(pMod, pModMachO->pvMapping, (KUPTR)pModMachO->pvMapping, pModMachO->LinkAddress, 1694 1694 pfnGetImport, pvUser); 1695 1695 … … 1717 1717 static int kldrModMachOObjDoImports(PKLDRMODMACHO pModMachO, PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser) 1718 1718 { 1719 const uint32_tcSyms = pModMachO->cSymbols;1720 uint32_tiSym;1719 const KU32 cSyms = pModMachO->cSymbols; 1720 KU32 iSym; 1721 1721 int rc; 1722 1722 … … 1745 1745 { 1746 1746 const char *pszSymbol; 1747 size_tcchSymbol;1748 uint32_tfKind = KLDRSYMKIND_REQ_FLAT;1747 KSIZE cchSymbol; 1748 KU32 fKind = KLDRSYMKIND_REQ_FLAT; 1749 1749 KLDRADDR Value; 1750 1750 … … 1754 1754 1755 1755 /* Get the symbol name and try resolve it. */ 1756 if (( uint32_t)paSyms[iSym].n_un.n_strx >= pModMachO->cchStrings)1756 if ((KU32)paSyms[iSym].n_un.n_strx >= pModMachO->cchStrings) 1757 1757 return KLDR_ERR_MACHO_BAD_SYMBOL; 1758 1758 pszSymbol = &pModMachO->pchStrings[paSyms[iSym].n_un.n_strx]; … … 1769 1769 1770 1770 /* Update the symbol. */ 1771 paSyms[iSym].n_value = ( uint32_t)Value;1771 paSyms[iSym].n_value = (KU32)Value; 1772 1772 if (paSyms[iSym].n_value != Value) 1773 1773 { … … 1796 1796 { 1797 1797 const char *pszSymbol; 1798 size_tcchSymbol;1799 uint32_tfKind = KLDRSYMKIND_REQ_FLAT;1798 KSIZE cchSymbol; 1799 KU32 fKind = KLDRSYMKIND_REQ_FLAT; 1800 1800 KLDRADDR Value; 1801 1801 … … 1850 1850 static int kldrModMachOObjDoFixups(PKLDRMODMACHO pModMachO, void *pvMapping, KLDRADDR NewBaseAddress) 1851 1851 { 1852 uint32_tiSeg;1852 KU32 iSeg; 1853 1853 int rc; 1854 1854 … … 1867 1867 { 1868 1868 PKLDRMODMACHOSEG pSeg = &pModMachO->aSegments[iSeg]; 1869 uint32_tiSect;1869 KU32 iSect; 1870 1870 1871 1871 for (iSect = 0; iSect < pSeg->cSections; iSect++) 1872 1872 { 1873 1873 PKLDRMODMACHOSECT pSect = &pSeg->paSections[iSect]; 1874 uint8_t*pbSectBits;1874 KU8 *pbSectBits; 1875 1875 1876 1876 /* skip sections without fixups. */ … … 1889 1889 * Apply the fixups. 1890 1890 */ 1891 pbSectBits = ( uint8_t *)pvMapping + (uintptr_t)pSect->RVA;1891 pbSectBits = (KU8 *)pvMapping + (KUPTR)pSect->RVA; 1892 1892 if (pModMachO->Hdr.magic == IMAGE_MACHO32_SIGNATURE) /** @todo this aint right. */ 1893 1893 rc = kldrModMachOFixupSectionGeneric32Bit(pModMachO, pbSectBits, pSect, … … 1915 1915 * @param NewBaseAddress The new base image address. 1916 1916 */ 1917 static int kldrModMachOFixupSectionGeneric32Bit(PKLDRMODMACHO pModMachO, uint8_t*pbSectBits, PKLDRMODMACHOSECT pFixupSect,1918 macho_nlist_32_t *paSyms, uint32_tcSyms, KLDRADDR NewBaseAddress)1917 static int kldrModMachOFixupSectionGeneric32Bit(PKLDRMODMACHO pModMachO, KU8 *pbSectBits, PKLDRMODMACHOSECT pFixupSect, 1918 macho_nlist_32_t *paSyms, KU32 cSyms, KLDRADDR NewBaseAddress) 1919 1919 { 1920 1920 const macho_relocation_info_t *paFixups = pFixupSect->paFixups; 1921 const uint32_tcFixups = pFixupSect->cFixups;1922 size_t cbSectBits = (size_t)pFixupSect->cb;1923 const uint8_t*pbSectVirginBits;1924 uint32_tiFixup;1921 const KU32 cFixups = pFixupSect->cFixups; 1922 KSIZE cbSectBits = (KSIZE)pFixupSect->cb; 1923 const KU8 *pbSectVirginBits; 1924 KU32 iFixup; 1925 1925 KLDRPU uFixVirgin; 1926 1926 KLDRPU uFix; … … 1936 1936 if (rc) 1937 1937 return rc; 1938 pbSectVirginBits = (const uint8_t*)pModMachO->pvBits + pFixupSect->offFile;1938 pbSectVirginBits = (const KU8 *)pModMachO->pvBits + pFixupSect->offFile; 1939 1939 } 1940 1940 else … … 1956 1956 { 1957 1957 /* sanity */ 1958 if (( uint32_t)Fixup.r.r_address >= cbSectBits)1958 if ((KU32)Fixup.r.r_address >= cbSectBits) 1959 1959 return KLDR_ERR_BAD_FIXUP; 1960 1960 1961 1961 /* calc fixup addresses. */ 1962 1962 uFix.pv = pbSectBits + Fixup.r.r_address; 1963 uFixVirgin.pv = pbSectVirginBits ? ( uint8_t*)pbSectVirginBits + Fixup.r.r_address : 0;1963 uFixVirgin.pv = pbSectVirginBits ? (KU8 *)pbSectVirginBits + Fixup.r.r_address : 0; 1964 1964 1965 1965 /* … … 1994 1994 { 1995 1995 PKLDRMODMACHOSECT pSymSect; 1996 if (( uint32_t)pSym->n_sect - 1 > pModMachO->cSections)1996 if ((KU32)pSym->n_sect - 1 > pModMachO->cSections) 1997 1997 return KLDR_ERR_MACHO_BAD_SYMBOL; 1998 1998 pSymSect = &pModMachO->paSections[pSym->n_sect - 1]; … … 2032 2032 { 2033 2033 PKLDRMODMACHOSECT pSymSect; 2034 uint32_tiSymSect;2034 KU32 iSymSect; 2035 2035 KLDRADDR Value; 2036 2036 2037 2037 /* sanity */ 2038 2038 KLDRMODMACHO_ASSERT(Fixup.s.r_scattered); 2039 if (( uint32_t)Fixup.s.r_address >= cbSectBits)2039 if ((KU32)Fixup.s.r_address >= cbSectBits) 2040 2040 return KLDR_ERR_BAD_FIXUP; 2041 2041 2042 2042 /* calc fixup addresses. */ 2043 2043 uFix.pv = pbSectBits + Fixup.s.r_address; 2044 uFixVirgin.pv = pbSectVirginBits ? ( uint8_t*)pbSectVirginBits + Fixup.s.r_address : 0;2044 uFixVirgin.pv = pbSectVirginBits ? (KU8 *)pbSectVirginBits + Fixup.s.r_address : 0; 2045 2045 2046 2046 /* … … 2092 2092 switch (Fixup.r.r_length) 2093 2093 { 2094 case 0: *uFix.pu8 = ( uint8_t)SymAddr; break;2095 case 1: *uFix.pu16 = ( uint16_t)SymAddr; break;2096 case 2: *uFix.pu32 = ( uint32_t)SymAddr; break;2097 case 3: *uFix.pu64 = ( uint64_t)SymAddr; break;2094 case 0: *uFix.pu8 = (KU8)SymAddr; break; 2095 case 1: *uFix.pu16 = (KU16)SymAddr; break; 2096 case 2: *uFix.pu32 = (KU32)SymAddr; break; 2097 case 3: *uFix.pu64 = (KU64)SymAddr; break; 2098 2098 } 2099 2099 } … … 2123 2123 && pModMachO->cSymbols) 2124 2124 { 2125 size_tcbSyms;2126 size_tcbSym;2125 KSIZE cbSyms; 2126 KSIZE cbSym; 2127 2127 void *pvSyms; 2128 2128 void *pvStrings; … … 2163 2163 if (pModMachO->Hdr.magic == IMAGE_MACHO32_SIGNATURE_OE) 2164 2164 { 2165 uint32_tcLeft = pModMachO->cSymbols;2165 KU32 cLeft = pModMachO->cSymbols; 2166 2166 macho_nlist_32_t *pSym = (macho_nlist_32_t *)pvSyms; 2167 2167 while (cLeft-- > 0) 2168 2168 { 2169 2169 pSym->n_un.n_strx = KLDR_E2E_U32(pSym->n_un.n_strx); 2170 pSym->n_desc = ( int16_t)KLDR_E2E_U16(pSym->n_desc);2170 pSym->n_desc = (KI16)KLDR_E2E_U16(pSym->n_desc); 2171 2171 pSym->n_value = KLDR_E2E_U32(pSym->n_value); 2172 2172 pSym++; … … 2175 2175 else if (pModMachO->Hdr.magic == IMAGE_MACHO64_SIGNATURE_OE) 2176 2176 { 2177 uint32_tcLeft = pModMachO->cSymbols;2177 KU32 cLeft = pModMachO->cSymbols; 2178 2178 macho_nlist_64_t *pSym = (macho_nlist_64_t *)pvSyms; 2179 2179 while (cLeft-- > 0) 2180 2180 { 2181 2181 pSym->n_un.n_strx = KLDR_E2E_U32(pSym->n_un.n_strx); 2182 pSym->n_desc = ( int16_t)KLDR_E2E_U16(pSym->n_desc);2182 pSym->n_desc = (KI16)KLDR_E2E_U16(pSym->n_desc); 2183 2183 pSym->n_value = KLDR_E2E_U64(pSym->n_value); 2184 2184 pSym++; … … 2210 2210 * @param ppaFixups Where to put the pointer to the allocated fixup array. 2211 2211 */ 2212 static int kldrModMachOLoadFixups(PKLDRMODMACHO pModMachO, KLDRFOFF offFixups, uint32_tcFixups, macho_relocation_info_t **ppaFixups)2212 static int kldrModMachOLoadFixups(PKLDRMODMACHO pModMachO, KLDRFOFF offFixups, KU32 cFixups, macho_relocation_info_t **ppaFixups) 2213 2213 { 2214 2214 macho_relocation_info_t *paFixups; 2215 size_tcbFixups;2215 KSIZE cbFixups; 2216 2216 int rc; 2217 2217 … … 2234 2234 || pModMachO->Hdr.magic == IMAGE_MACHO64_SIGNATURE_OE) 2235 2235 { 2236 uint32_tiFixup;2236 KU32 iFixup; 2237 2237 for (iFixup = 0; iFixup < cFixups; iFixup++) 2238 2238 { 2239 uint32_t *pu32 = (uint32_t*)&paFixups[iFixup];2239 KU32 *pu32 = (KU32 *)&paFixups[iFixup]; 2240 2240 pu32[0] = KLDR_E2E_U32(pu32[0]); 2241 2241 pu32[1] = KLDR_E2E_U32(pu32[1]); … … 2265 2265 2266 2266 /** @copydoc kLdrModCallInit */ 2267 static int kldrModMachOCallInit(PKLDRMOD pMod, uintptr_tuHandle)2267 static int kldrModMachOCallInit(PKLDRMOD pMod, KUPTR uHandle) 2268 2268 { 2269 2269 /* later */ … … 2273 2273 2274 2274 /** @copydoc kLdrModCallTerm */ 2275 static int kldrModMachOCallTerm(PKLDRMOD pMod, uintptr_tuHandle)2275 static int kldrModMachOCallTerm(PKLDRMOD pMod, KUPTR uHandle) 2276 2276 { 2277 2277 /* later */ … … 2281 2281 2282 2282 /** @copydoc kLdrModCallThread */ 2283 static int kldrModMachOCallThread(PKLDRMOD pMod, uintptr_tuHandle, unsigned fAttachingOrDetaching)2283 static int kldrModMachOCallThread(PKLDRMOD pMod, KUPTR uHandle, unsigned fAttachingOrDetaching) 2284 2284 { 2285 2285 /* Relevant for Mach-O? */ … … 2300 2300 { 2301 2301 PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData; 2302 uint32_ti;2302 KU32 i; 2303 2303 int rc; 2304 2304 … … 2306 2306 * Zero the entire buffer first to simplify things. 2307 2307 */ 2308 kLdrHlpMemSet(pvBits, 0, ( size_t)pModMachO->cbImage);2308 kLdrHlpMemSet(pvBits, 0, (KSIZE)pModMachO->cbImage); 2309 2309 2310 2310 /* … … 2325 2325 continue; 2326 2326 rc = kLdrRdrRead(pMod->pRdr, 2327 ( uint8_t*)pvBits + (pMod->aSegments[i].LinkAddress - pModMachO->LinkAddress),2327 (KU8 *)pvBits + (pMod->aSegments[i].LinkAddress - pModMachO->LinkAddress), 2328 2328 pMod->aSegments[i].cbFile, 2329 2329 pMod->aSegments[i].offFile);
Note:
See TracChangeset
for help on using the changeset viewer.