![]() |
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 |
Re: Datei in ein Bytearray einlesen
reicht das schon als Schups? ;)
Delphi-Quellcode:
FileStream.Read(MyByteArray[0], Length(MyByteArray));
|
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; |
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 ![]()
Delphi-Quellcode:
Zwischen den Klammern will der ein : FileData:TByteArr; var P: TParameters
EntryPoint := PeUtils.GetEntryPoint();
Ich dachte ich mach das einfach mit:
Delphi-Quellcode:
Nur leider will das auch nicht...
PeUtils.GetEntryPoint(ReadIn(FileName))
[DCC Fehler] MeinProgramm.pas(3285): E2010 Inkompatible Typen: 'PEUtils.TByteArr' und 'MeinProgramm.TByteArr' Linguini |
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. |
Re: Datei in ein Bytearray einlesen
Frag ich mich auch... :D
Delphi-Quellcode:
_File : TByteArr;
_File := ReadIn(fileName); PEUtils.GetEntryPoint(@_File,P) ;
Code:
Wie muss ich den 2. Übergabewert also P: Tparameters definieren?
FileData:TByteArr; var P: TParameters
Der 1. also FileData sollte jetzt ja stimmen. |
Re: Datei in ein Bytearray einlesen
seit wann gibt es eigentlich
Delphi-Quellcode:
und warum nicht gleich überall dieses verwenden?
// Types.pas
TByteDynArray = array of Byte; [add] na genauso wie es dasteht?
Delphi-Quellcode:
ist in GetEntryPoint FileData wirklich als Pointer definiert (sieht nicht so aus)
var _File: TByteArr;
P: TParameters; _File := ReadIn(FileName); PEUtils.GetEntryPoint(_File, P); // bzw.: PEUtils.GetEntryPoint(ReadIn(FileName), P); und wenn nicht, warum dann @_File? |
Re: Datei in ein Bytearray einlesen
Delphi-Quellcode:
Prozedur:
_File : TByteArr;
P: TParameters; PEUtils.GetEntryPoint(ReadIn(fileName), P) ;
Delphi-Quellcode:
Leider enthalte ich damit immer bei "P.EntryPoint := PCardinal( @FileData[P.PE_Offset+$28] )^;" eine Exception:
procedure GetEntryPoint( FileData: TByteArr; var P: TParameters );
begin P.EntryPoint := PCardinal( @FileData[P.PE_Offset+$28] )^; end;
Code:
Irgendwo ist noch der Wurm drin...
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)
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 =) |
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? |
Re: Datei in ein Bytearray einlesen
@Linguini: Bitte unterlasse zukünftig das pushen innerhalb von 24 Stunden :)
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz