Zitat von
inmate
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