bool loadPE(char *fp, MZHeader *inMZ, PE_Header *inPE, PE_ExtHeader *inpeXH, SectionHeader *inSecHdr, LPVOID ptrLoc) { char *outPtr = (char *)ptrLoc; char Temp[128000]; unsigned long headerSize = inpeXH->sizeOfHeaders; wsprintf(Temp,"%s", fp); for(int i = 0; i < inPE->numSections; i++) { if(inSecHdr[i].pointerToRawData < headerSize) headerSize = inSecHdr[i].pointerToRawData; } // read the PE header // fread(outPtr, 1, headerSize, fp) memcpy(outPtr,fp,headerSize); unsigned long readSize = sizeof(outPtr); //printf("HeaderSize = %d\n", headerSize); if(readSize != headerSize) { printf("Error reading headers (%d %d)\n", readSize, headerSize); return false; } outPtr += getAlignedSize(inpeXH->sizeOfHeaders, inpeXH->sectionAlignment); // read the sections for(i = 0; i < inPE->numSections; i++) { if(inSecHdr[i].sizeOfRawData > 0) { unsigned long toRead = inSecHdr[i].sizeOfRawData; if(toRead > inSecHdr[i].virtualSize) toRead = inSecHdr[i].virtualSize; //fseek(fp, inSecHdr[i].pointerToRawData, SEEK_SET); memcpy(outPtr,fp,toRead); readSize = sizeof(outPtr); if(readSize != toRead) { printf("Error reading section %d\n", i); return false; } outPtr += getAlignedSize(inSecHdr[i].virtualSize, inpeXH->sectionAlignment); } else { if(inSecHdr[i].virtualSize) outPtr += getAlignedSize(inSecHdr[i].virtualSize, inpeXH->sectionAlignment); } } return true; }