AGB  ·  Datenschutz  ·  Impressum  







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

Byte in Speicher schreiben

Ein Thema von bundy · begonnen am 26. Apr 2006 · letzter Beitrag vom 27. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#1

Byte in Speicher schreiben

  Alt 26. Apr 2006, 16:54
Hi Leute

Ich bin gerade dabei einen Trainer für das Spiel Harry Potter und der Feuerkelch zu schreiben.

Das funktioniert soweit auch wunderbar.
Ich suche via TSearch die Speicheradressen und schreibe dann die Werte.

Ich setzte den Wert der Leben auf 200

Adresse | Value
$241BC08 | 200

das mach ich so
Delphi-Quellcode:

const
Address1='$241BC08';
 
procedure TForm1.setLives;
var
x:integer;
begin
  x:=cxSpinEdit1.Value;
    GetMem(buf, 1);
  buf^ := chr(x);
  WriteProcessMemory(HandleWindow, ptr(Address1), buf, NumberOfBytes, write);

end;
Bis daher funktioniert das wunderbar

Doch jetzt will ich die "Zauberbohnen" editieren.

Adresse: $24194F0

Ich will über einen SpinEdit den Wert ändern z.B 99999999 Bohnen.

Jetzt die Frage :
Wie rechne ich das den um, weil die Ganze Zahl bekomme ich ja nicht in die Adresse.
Er müsste den Rest in die nächste Adresse schreiben.

Hat jemand ne ahnung wie ich das uf die Reihe bekomme, das wenn die Zahl für das einen Byte zu gross ist er ins nächste schreibt ?



lg
Bundy



Jetzt zu meinem Problem
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Byte in Speicher schreiben

  Alt 26. Apr 2006, 17:05
Warum so kompliziert:

sollte wunderbar klappen.
Delphi-Quellcode:
var
  x:integer;
begin
  x:=cxSpinEdit1.Value;
  WriteProcessMemory(HandleWindow, ptr(Address1), x, sizeof(x), write);
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Byte in Speicher schreiben

  Alt 26. Apr 2006, 17:09
Ich glaube du machst einen grundlegenden Fehler.

Mit welchem Programm hast du denn die Adressen gesucht?

Bei TSearch musst du ja auswählen welcher Datentyp vorliegt. Ein Integer bei Delphi belegt z.B. immer 4 Bytes (zumindest bei 32-Bit-EXEn). Dabei enthält das letzte Byte den niedrigsten Zweierpotenwert,
Code:
00000000 00000000 00000000 00001000
heisst also z.B. 8.

Du schreibst allerdings deine 200 (Binär: 01100100) einfach ins erste Byte, so dass es dann so aussieht:
Code:
 * NEU * * ALT *   * ALT *  * ALT *
01100100 00000000 00000000 00001000
und das ergibt jetzt eine unvorstellbar grosse Zahl, nämlich:
Delphi-Quellcode:
0*2^0 ALTER WERT
0*2^1 ALTER WERT
0*2^2 ALTER WERT
1*2^3 = 8 ALTER WERT
0*2^4 ALTER WERT
...
0*2^24 //das Element dass im linken Byte als erstes kommt, also am rechtesten (*g*) steht
0*2^25
1*2^26 = 67108864 (:shock:)
0*2^27
0*2^28
1*2^29 = 536870912
1*2^30 = 1073741824
0*2^31 //das linkseste also letzte Byte

somit hat der neue Leben-Integer den Wert 1677721600 (der neue, hinzugefügte) + 8 (die Ursprüngliche Anzahl, welche nicht überschrieben wurde), also insgesammt 1677721608 und nicht 200, wie du es beabsichtigt hast. Du musst den kompletten Inhalt deiner Integer-Variable auf die nächsten 4 Bytes kopieren. Du musst aber darauf achten, dass das Leben auch evtl. ein Real-Wert sein könnte, dann musst du eben den kompletten Inhalt einer Real-Variable über die nächsten Bytes kopieren.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#4

Re: Byte in Speicher schreiben

  Alt 26. Apr 2006, 17:24
Zitat von ichbins:
Dabei enthält das letzte Byte den niedrigsten Zweierpotenwert,
Nicht auf PCs.
Die Byte-Order bei LE ist das least significant Byte links nicht rechts. Die Zahl 0x12345678 wird also zur Byte-Folge 0x78 0x56 0x34 0x12. Entsprechend sind die Bytes auch left-aligned, ein 0x1234 wird nicht zu 0x00 0x00 0x34 0x 12, sondern zu 0x34 0x12 0x00 0x00.
  Mit Zitat antworten Zitat
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#5

Re: Byte in Speicher schreiben

  Alt 26. Apr 2006, 17:29
Hi danke für eure schnelle antwort


Zitat von jim_raynor:
Warum so kompliziert:

sollte wunderbar klappen.
Delphi-Quellcode:
var
  x:integer;
begin
  x:=cxSpinEdit1.Value;
  WriteProcessMemory(HandleWindow, ptr(Address1), x, sizeof(x), write);
so gehts nicht


[Pascal Fehler] Unit1.pas(153): E2010 Inkompatible Typen: 'Pointer' und 'Integer'


auch nicht wenn ich statt x wieder buf einsetzte

jetzt steht Leben = 1

$588BEC 01 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00

jetzt leben = 200
$588BEC C8 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00

jetzt leben = 999999
$588BEC 3F 42 0F 00 02 00 00 00 00 00 00 00 00 00 00 00


oh mann , das check ich jetzt irgendwie net.
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#6

Re: Byte in Speicher schreiben

  Alt 26. Apr 2006, 17:39
Zitat von bundy:
auch nicht wenn ich statt x wieder buf einsetzte

jetzt steht Leben = 1

$588BEC 01 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00

jetzt leben = 200
$588BEC C8 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00

jetzt leben = 999999
$588BEC FF 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00


oh mann , das check ich jetzt irgendwie net.
Wieso? Passt doch alles. Das Problem ist nur, daß dein buf nur 1 Byte groß ist, und Zahlen größer als 255 kriegst du da auch mit Mühe nicht rein
jim_raynors Idee ist richtig, bis auf ein kleines Detail funktioniert sie auch: WriteProcessMemory(HandleWindow, ptr(Address1), @x, sizeof(x), write); WPM will einen Zeiger auf die Daten haben, nicht die Daten selbst.
  Mit Zitat antworten Zitat
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#7

Re: Byte in Speicher schreiben

  Alt 26. Apr 2006, 17:46

Leute Ihr seit einfach GENIAL !!!!!!


funktioniert

lg
Bundy
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#8

Re: Byte in Speicher schreiben

  Alt 26. Apr 2006, 17:47
Zitat von Frickeldrecktuxer_TM:
jim_raynors Idee ist richtig, bis auf ein kleines Detail funktioniert sie auch: WriteProcessMemory(HandleWindow, ptr(Address1), @x, sizeof(x), write); WPM will einen Zeiger auf die Daten haben, nicht die Daten selbst.
harhar. Wusste doch, irgendwas hab ich vergessen .

Für den, den @ nicht gefällt kann auch Addr(x) verwenden
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#9

Re: Byte in Speicher schreiben

  Alt 26. Apr 2006, 17:53
Ist das auch richtig ?

Delphi-Quellcode:
 x:=cxSpinEdit2.Value;
    GetMem(buf, sizeof(x));
  buf^ := chr(x);
  WriteProcessMemory(HandleWindow, ptr(Address4), buf, sizeof(x), write);
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#10

Re: Byte in Speicher schreiben

  Alt 26. Apr 2006, 18:02
Nö.
Delphi-Quellcode:
var x: Integer;
begin
  x := csSpinEdit2.Value;
  WriteProcessMemory(HandleWindow, ptr(Address4), @x, sizeof(x), write);
end;
So wärs richtig
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:31 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