Einzelnen Beitrag anzeigen

mr_emre_d
(Gast)

n/a Beiträge
 
#16

Re: Datei in ein Bytearray einlesen

  Alt 21. Mai 2009, 12:50
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
  Mit Zitat antworten Zitat