Zitat Zitat von inmate Beitrag anzeigen
Und wie kommst du darauf das die User, der Sprache English nicht mächtig sind ?
Weil die Erfahrung das immer wieder bestätigt...
________________________________
PS: folgende (C) Funktion ist in der Lage den benötigten SizeOfImage Wert zu berechnen:
Code:
#define Align(sz, alignment) (((sz) % (alignment)) ? ((sz) + (alignment) - ((sz) % (alignment))) : (sz))

int calculateSizeOfImage(char *data)
{
    int offset;
    int i;
    int vAddress;
    int SizeOfImage;
    
    IMAGE_DOS_HEADER *idh;
    IMAGE_NT_HEADERS *inh;
    IMAGE_SECTION_HEADER *ish;
    
    idh = (IMAGE_DOS_HEADER *) data;
    inh = (IMAGE_NT_HEADERS *) &data[idh->e_lfanew];
    offset = idh->e_lfanew + sizeof(IMAGE_NT_HEADERS);
    
    vAddress = 0;
    for(i = 0; i < inh->FileHeader.NumberOfSections; i++)
    {
        ish = (IMAGE_SECTION_HEADER *) &data[offset];
        offset += sizeof(IMAGE_SECTION_HEADER);
        
        if (vAddress < ish->VirtualAddress)
        {
            vAddress = ish->VirtualAddress;
            SizeOfImage = ish->VirtualAddress + Align(ish->SizeOfRawData, inh->OptionalHeader.SectionAlignment);
        }
    }
    
    return SizeOfImage;
}
Da SizeOfImage eigentlich nur die höchste zu ladende Adresse - ImageBase ist geht die Berechnung wie folgt:
- Suche die Section mit der höchsten Virtuellen Adresse
- Rechne: SizeOfImage = SectionAnfang + SectionEnde
(das - ImageBase fällt weg, weil diese Adressen RVA's sind)


mfG. BlackBerry