Die Funktion GetEntryPoint verlangt ein ByteArr. welches das ganze Image enthält.
Dh. du musst zuerst einmal eine Variable vom Typ TByteArr definieren;
dann lädst du die Image-Datei rein. Anschließend übergibts du der Funktion die
verlangten zwei Parameter und bekommst ein EntryPoint zurückgeliefert.
Der zweite Parameter ist eine Struktur, deren Aufbau du dir in der
Unit anschauen kannst.
Wie du schon siehst, wird in der eigentlich GetEntryPoint Routine das PE_Offset Element benötigt - Dazu musst du vorher noch GetPEOffset() aufrufen.
Bevor du jedoch irgendetwas mit dem ByteArr-Image anstellst, prüf nach ob es eine Valide (Exe)Image Datei ist (->ValidateEXEFile und ValidatePEFile müssen beide True zurückliefern).
Viel Glück
EDIT:
Delphi-Quellcode:
function easyGetEntryPoint(Filename: String): Cardinal; // für dich vereinfachte form
var
F: File of Byte;
RawFileData: TByteArr;
PEParams: TParameters;
begin
Result := INVALID_HANDLE_VALUE;
if not FileExists( Filename ) then
Exit;
// -Einlesen
AssignFIle( F, Filename );
Reset( F );
SetLength( RawFileData, FileSize( F ) );
BlockRead( F, RawFileData[0], Length(RawFileData) );
CloseFile( F );
// -Validieren
if not ValidateExeFile( RawFileData ) then
Exit;
FillChar( PEParams, SizeOf(PEParams), 0 );
GetPEOffset( RawFileData, PEParams );
if not ValidatePEFile( RawFileData, PEParams.PE_Offset ) then
Exit;
// EntryPoint ermitteln
GetEntryPoint( RawFileData, PEParams );
SetLength( RawFileData, 0 );
Result := PEParams.EntryPoint;
end;
MfG