Ignore:
Timestamp:
Feb 2, 2001, 9:45:42 AM (25 years ago)
Author:
bird
Message:

Corrected kFileLX and kFilePE constructors.
Made kDump.exe work again.
Added import module dump to kFilePE.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/common/kFilePE.cpp

    r4358 r5053  
    4141/**
    4242 * Constructs a kFilePE object for a file.
    43  * @param     phFile  File to create object from.
     43 * @param     pFile     File to create object from.
    4444 * @remark    throws errorcode (TODO: errorhandling.)
    4545 */
    46 kFilePE::kFilePE(FILE *phFile) throw(int) : pvBase(NULL),
     46kFilePE::kFilePE(kFile *pFile) throw(int) : pvBase(NULL),
    4747    pDosHdr(NULL), pFileHdr(NULL), pOptHdr(NULL), paDataDir(NULL), paSectionHdr(NULL),
    4848    pExportDir(NULL),
     
    6262
    6363    /* read dos-header - assumes there is one */
    64     if (!fseek(phFile, 0, SEEK_SET)
    65         && fread(&doshdr, sizeof(doshdr), 1, phFile) == 1
     64    if (   pFile->readAt(&doshdr, sizeof(doshdr), 0)
    6665        && doshdr.e_magic == IMAGE_DOS_SIGNATURE
    6766        && doshdr.e_lfanew > sizeof(doshdr)
     
    7170
    7271        /* read pe headers */
    73         if (!fseek(phFile, doshdr.e_lfanew, SEEK_SET)
    74             && fread(&pehdr, sizeof(pehdr), 1, phFile) == 1
     72        if (   pFile->readAt(&pehdr, sizeof(pehdr), doshdr.e_lfanew)
    7573            && pehdr.Signature == IMAGE_NT_SIGNATURE
    7674            && pehdr.FileHeader.SizeOfOptionalHeader == sizeof(IMAGE_OPTIONAL_HEADER)
     
    7876        {
    7977            /* create mapping */
    80             pvBase = malloc((size_t)pehdr.OptionalHeader.SizeOfImage);
     78            pvBase = calloc((size_t)pehdr.OptionalHeader.SizeOfImage, 1);
    8179            if (pvBase != NULL)
    8280            {
    83                 memset(pvBase, 0, (size_t)pehdr.OptionalHeader.SizeOfImage);
    8481                /*
    8582                printf("%ld\n", pehdr.OptionalHeader.SizeOfHeaders);
     
    8885                       sizeof(IMAGE_NT_HEADERS) + sizeof(IMAGE_SECTION_HEADER) * pehdr.FileHeader.NumberOfSections);
    8986                */
    90                 if (!fseek(phFile, 0, SEEK_SET)
    91                     && fread(pvBase, (size_t)pehdr.OptionalHeader.SizeOfHeaders, 1, phFile) == 1
    92                     )
     87                if (pFile->readAt(pvBase, pehdr.OptionalHeader.SizeOfHeaders, 0))
    9388                {
    9489                    /* read sections */
     
    105100
    106101                        cbSection = min(pSectionHdr->Misc.VirtualSize, pSectionHdr->SizeOfRawData);
    107                         if (cbSection
    108                             &&
    109                              (fseek(phFile, pSectionHdr->PointerToRawData, SEEK_SET)
    110                              ||
    111                              fread((void*)((ULONG)pvBase + pSectionHdr->VirtualAddress), (size_t)cbSection, 1, phFile) != 1
    112                              )
     102                        if (    cbSection
     103                            &&  !pFile->readAt((char*)pvBase + pSectionHdr->VirtualAddress,
     104                                               cbSection,
     105                                               pSectionHdr->PointerToRawData)
    113106                            )
    114107                        {
     
    286279                     paSectionHdr[i].Characteristics
    287280                     );
    288 
    289     }
     281    }
     282    pOut->printf("\n");
    290283
    291284
     
    328321
    329322    /*
     323     * Dump Import Directory if present.
     324     */
     325    if (pImportDir)
     326    {
     327        pOut->printf("Import Directory\n"
     328                     "----------------\n");
     329       
     330        PIMAGE_IMPORT_DESCRIPTOR pCur = pImportDir;
     331        while (pCur->u.Characteristics != 0)
     332        {
     333            pOut->printf("%s\n", (char*)pvBase + pCur->Name);
     334            pCur++;
     335        }
     336    }   
     337
     338
     339    /*
    330340     * Dump TLS directory if present
    331341     */
Note: See TracChangeset for help on using the changeset viewer.