Entwickler-Ecke

Sonstiges (Delphi) - Adresse mit Offset addieren?! Wie?


q19 - Fr 09.07.10 14:59
Titel: Adresse mit Offset addieren?! Wie?
Hi,

Folgender Sachverhalt:

Ich habe eine Speicheraddresse(Variablenname=Basis1) welches auf eine weitere Addresse verweist (Variablenname=Basis2).
Nun soll diesem Wert (Basis2) ein Offset (hier: 1908) hinzu addiert werden.
Die daraus entstehende Adresse (Variablenname=Result) soll ausgelesen werden.

Mein Quelltext sieht so aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
...
var
  Form1: TForm1;
  basis1,basis2,Result:pointer;
  bytes:dword;
  Wert:integer;
  WindowTitle : pansichar;
  WindowName, ThreadID, ProcessID, HandleWindow : integer;

...
Basis1:=ptr($0092969c);

WindowTitle:='...';
WindowName:=findwindow(nil,WindowTitle);
ThreadID:=getwindowthreadprocessid(WindowName,@processid);
HandleWindow:=OpenProcess(Process_all_access,false,processid);
readprocessmemory(handlewindow,Basis1,@Basis2,4,bytes);
closehandle(handlewindow);

Result:=Basis2+1908//----Hier steckt der Wurm!

HandleWindow:=OpenProcess(Process_all_access,false,processid);
readprocessmemory(handlewindow,result,@Wert,4,bytes);
closehandle(handlewindow);

showmessage(inttostr(Wert));



Kann mit bitte jemand weiterhelfen...

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


delfiphan - Fr 09.07.10 15:15


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Result := Pointer(UINT_PTR(Basis2) + 1908);

// Oder

Result := Basis2;
Inc(PByte(Result), 1908);


Äusserst unschöner Code.


Flamefire - Fr 09.07.10 15:55

@delfiphan: so gehts nicht. es geht um nen fremden prozess.

also einfach so machen wie du es schon machst ist es richtig.
check mal deine adressen im debugger. vl einfach ein $1908 statt 1908?
BTW: WArum schließt du dein Handle und öffnest es gleich wieder?


delfiphan - Fr 09.07.10 16:19

user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
@delfiphan: so gehts nicht. es geht um nen fremden prozess.

Er hat einen Pointer und will einen Offset in Bytes hinzuaddieren. Ist doch egal ob es um einen fremden Prozess geht.


Flamefire - Fr 09.07.10 20:57

ah sry...
einfacher gehts aber wann du die typen deiner variablen auf cardinal änderst. dann kannst ganz leicht addieren

PS: Das nächste mal den Compilerfehler mitschreiben! sonst gibts nen bann