AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherbereich in Bytearray schreiben

Ein Thema von BenTech · begonnen am 28. Mai 2007 · letzter Beitrag vom 28. Mai 2007
Antwort Antwort
BenTech

Registriert seit: 16. Jun 2003
Ort: Dortmund
60 Beiträge
 
Turbo Delphi für Win32
 
#1

Speicherbereich in Bytearray schreiben

  Alt 28. Mai 2007, 21:21
Hallo,
ich habe versucht über die DP-Suche eine Antwort auf meine Frage zu finde, hatte aber leider keinen Erfolg. Vor allem wusste ich nicht so recht, wonach ich genau suchen muss

Zu meiner Frage:
Ich habe den Pointer, der die Adresse eines "Packed Record"s angibt. Hinter dem Record stehen noch weitere Informationen, die ich nun auslesen möchte. Geplant war es so, dass ich die Daten in ein Byte Array schreibe, das ich dann weiter analysieren kann.
Ich habe, da ich bisher nicht viel mit direkten Speicherzugriffen gearbeitet habe, keine Ahnung, wie das funktioniert. Kann mir da eventuell jemand auf die Sprünge helfen? Ist bestimmt nicht schwer
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Speicherbereich in Bytearray schreiben

  Alt 28. Mai 2007, 22:10
Zitat von BenTech:
Ich habe, da ich bisher nicht viel mit direkten Speicherzugriffen gearbeitet habe keine Ahnung, wie das funktioniert. Kann mir da eventuell jemand auf die Sprünge helfen? Ist bestimmt nicht schwer
Doch, ist schwer! Die Speicherplätze werden vom Betriebssystem verwaltet und zugewiesen, Dein Programm kann dort also normalerweise nur über die Pointer zugreifen. Direkter Speicherzugriff ist unter XP das Verbotenste, was es gibt.

Du musst also Deine Inhalte in Variablen kopieren und dann untersuchen. Wenn Du den packed record kennst, sollte das eingentlich kein Problem sein...

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Speicherbereich in Bytearray schreiben

  Alt 28. Mai 2007, 22:15
eventuell ist das was du suchst ja ein typisierter Pointer.
Wenn du Beispielsweise folgenden packed Record hast:
Delphi-Quellcode:
type
  TYourRecord = packed record
    Daten1: XYZ;
    Daten2: YYZ;
  end;
so kannst du folgendermaßen einen typisierten Pointer erstellen und damit arbeiten:
Delphi-Quellcode:
var
  MyRecord: ^TYourRecord; //Einen Pointer der auf einen TYourRecord zeigt
begin
  MyRecord := DerPointerWelcherAufDenRecordZeigt;
  MyRecord^.Daten1 := irgendwas;
  MyRecord^.Daten2 := irgendwas;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
BenTech

Registriert seit: 16. Jun 2003
Ort: Dortmund
60 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Speicherbereich in Bytearray schreiben

  Alt 28. Mai 2007, 22:37
Zitat:
Doch, ist schwer! Die Speicherplätze werden vom Betriebssystem verwaltet und zugewiesen, Dein Programm kann dort also normalerweise nur über die Pointer zugreifen. Direkter Speicherzugriff ist unter XP das Verbotenste, was es gibt.
Hmm, es geht aber um Speicher, der von meinem Programm zuvor beschrieben wurde. Die Zusatzinfos stehen direkt hinter dem Record. Daher müsste es doch eigentlich gehen, dass ich nach dem Ende des Records die folgenden Speicherbereiche auslese.

Zitat:
eventuell ist das was du suchst ja ein typisierter Pointer.
Wenn du Beispielsweise folgenden packed Record hast
Das Problem ist, dass die Daten hinter dem Record unterschiedlich groß sein können. Im Record selber existiert ein Eintrag, aus dem man auslesen kann, wie groß der zusätzliche Bereich hinter diesem Record ist. Der Anhang hängt also vom Inhalt des Records ab.

Vielleicht hab ich mich auch etwas unglücklich ausgedrückt.
Ich habe den Pointer und die Länge des Records und die Länge des Anhangs. Ich müsste also lediglich den Speicherbereich ab dem Pointer bis zum Ende des Anhangs auslesen. Nur weiß ich nicht, wie das geht
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Speicherbereich in Bytearray schreiben

  Alt 28. Mai 2007, 22:50
Hi,

wenn du auf den Bereich hinter den Record zugreifen möchtest wäre dies eine Möglichkeit:
Delphi-Quellcode:
type
  TMyRecord = packed record
    Daten1: integer;
    Daten2: byte;
    ...
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyR: TMyRecord;
  pB: PByteArray;
begin
  pB:= Pointer(Cardinal(@MyR)+ SizeOf(TMyRecord));
  caption:= inttostr(pB^[0]);//DEMO
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
BenTech

Registriert seit: 16. Jun 2003
Ort: Dortmund
60 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Speicherbereich in Bytearray schreiben

  Alt 28. Mai 2007, 23:54
Ahh, vielen Dank. Das ist genau das, was ich gesucht habe
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.
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