Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei in ein Bytearray einlesen (https://www.delphipraxis.net/134374-datei-ein-bytearray-einlesen.html)

Linguini 20. Mai 2009 20:33


Datei in ein Bytearray einlesen
 
Hi,

eine ganz kurze Frage :D

Wie kann ich eine Datei in ein Byte Array (TByteArr = Array of Byte) einlesen?

Ich bräuchte nur einen kleinen Schubs in die richtige Richtung der verwendeten Unit/Funktion.

Danke

Linguini

Satty67 20. Mai 2009 20:36

Re: Datei in ein Bytearray einlesen
 
reicht das schon als Schups? ;)
Delphi-Quellcode:
FileStream.Read(MyByteArray[0], Length(MyByteArray));

mr_emre_d 20. Mai 2009 21:28

Re: Datei in ein Bytearray einlesen
 
Falls ne, dann *tritt,fg*:

Delphi-Quellcode:
type TByteArr = Array of Byte;

function ReadIn( const Filename: String ): TByteArr;
var
  f: File of Byte;
  Err: String;
begin
  if not FileExists(Filename) then
    Exit;
  {$i-}
  AssignFile( F, Filename );
  Reset( F );
  SetLength( Result, FileSize(F) );
  BlockRead( F, Result[0], Length(Result) );
  CloseFile( F );
  {i-}
  Err := SysErrorMessage( IOResult );
  if Err <> 0 then
    MessageBoxA( Handle, pChar( 'Error [' + IntToStr(IOResult) + ']'#13#10#13#10+Err ),
      'Error', MB_OK or MB_ICONERROR );
end;

Linguini 21. Mai 2009 09:01

Re: Datei in ein Bytearray einlesen
 
Es will leider immer noch nicht funktionieren =/

Ich versuche den Entrypoint eines Programmes herauszufinden, dazu benutze ich die Unit aus diesem Anhang.

Delphi-Quellcode:
EntryPoint := PeUtils.GetEntryPoint();
Zwischen den Klammern will der ein : FileData:TByteArr; var P: TParameters


Ich dachte ich mach das einfach mit:
Delphi-Quellcode:
PeUtils.GetEntryPoint(ReadIn(FileName))
Nur leider will das auch nicht...

[DCC Fehler] MeinProgramm.pas(3285): E2010 Inkompatible Typen: 'PEUtils.TByteArr' und 'MeinProgramm.TByteArr'

Linguini

SirThornberry 21. Mai 2009 09:36

Re: Datei in ein Bytearray einlesen
 
Liegt einfach nur daran das TByteArray an 2 verschiedenen Stellen definiert ist. Selbst wenn sie exakt gleich definiert sind bekommst du diese Meldung.
Warum hast du es eigentlich doppelt definiert? Wenn es bereits in PEUtils definiert ist, ist es doch überflüssig es noch einmal zu definieren.

Linguini 21. Mai 2009 09:59

Re: Datei in ein Bytearray einlesen
 
Frag ich mich auch... :D


Delphi-Quellcode:
 _File  : TByteArr;

_File := ReadIn(fileName);

PEUtils.GetEntryPoint(@_File,P) ;

Code:
 FileData:TByteArr; var P: TParameters
Wie muss ich den 2. Übergabewert also P: Tparameters definieren?
Der 1. also FileData sollte jetzt ja stimmen.

himitsu 21. Mai 2009 10:04

Re: Datei in ein Bytearray einlesen
 
seit wann gibt es eigentlich
Delphi-Quellcode:
// Types.pas
TByteDynArray = array of Byte;
und warum nicht gleich überall dieses verwenden?

[add]
na genauso wie es dasteht?
Delphi-Quellcode:
var _File: TByteArr;
  P: TParameters;

_File := ReadIn(FileName);
PEUtils.GetEntryPoint(_File, P);
// bzw.:
PEUtils.GetEntryPoint(ReadIn(FileName), P);
ist in GetEntryPoint FileData wirklich als Pointer definiert (sieht nicht so aus)
und wenn nicht, warum dann @_File?

Linguini 21. Mai 2009 10:28

Re: Datei in ein Bytearray einlesen
 
Delphi-Quellcode:
  _File  : TByteArr;
  P: TParameters;


PEUtils.GetEntryPoint(ReadIn(fileName), P) ;
Prozedur:

Delphi-Quellcode:
procedure GetEntryPoint( FileData: TByteArr; var P: TParameters );
begin
  P.EntryPoint := PCardinal( @FileData[P.PE_Offset+$28] )^;
end;
Leider enthalte ich damit immer bei "P.EntryPoint := PCardinal( @FileData[P.PE_Offset+$28] )^;" eine Exception:

Code:
Erste Gelegenheit für Exception bei $7C812AFB. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00476ED9 in Modul 'PhosGenPro.exe'. Lesen von Adresse FF930040'. Prozess PhosGenPro.exe (1488)
Irgendwo ist noch der Wurm drin...
In "fileName" liegt der Pfad zu der Datei. ReadIn ist die Prozedur, die mr_emre_d in diesem Thread bereits gepostet hat.

Danke für eure super Hilfe bisher =)

Linguini 21. Mai 2009 11:18

Re: Datei in ein Bytearray einlesen
 
Es darf auch gerne jemand Alternativen vorschlagen, um den EntryPoint und die ImageBase herauszufinden, falls es welche gibt^^

@Problem

Vielleicht gibt es ein Problem mit der ReadIn Prozedur?

SirThornberry 21. Mai 2009 11:22

Re: Datei in ein Bytearray einlesen
 
@Linguini: Bitte unterlasse zukünftig das pushen innerhalb von 24 Stunden :)
2.3.2.4 - In der Ruhe liegt die Kraft: Kein "Pushen" von Beiträgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz