![]() |
Gibt es zu jedem String einen Pointer?
Hi,
Ich durchsuche den Speicher eines fremden Programms nach einem String. Den finde ich auch. (Text eines Labels z.B.) Jetzt versuche ich die Adresse eines Pointers rauszufinden, die auf diesen String zeigt. Ich gehe dabei so vor:
Delphi-Quellcode:
Allerdings werde ich nicht fündig. Aber es müsste doch einen geben oder nicht? Wie will man sonst drauf zugreifen?? Oder ist der Code falsch? (Das der Code etwas unperformant ist, ist mir bewusst :P )
var buff,i: Cardinal;
begin StrAddr := GetStrAddr; // nicht das Problem i := 0; repeat inc(i); ReadProcessMemory(Process,Pointer(i),@Buff,SizeOf(Pointer),br); until Pointer(Buff) = StrAddr; end; Gruß Neutral General |
Re: Gibt es zu jedem String einen Pointer?
Hallo Michael,
wer garantiert dir, dass ein Zeiger genau auf das erste Zeichen des Textes zeigt? Der Text könnte beispielsweise auch ein ShortString mit einem führenden Längenbyte sein. Gruß Hawkeye |
Re: Gibt es zu jedem String einen Pointer?
Zitat:
|
Re: Gibt es zu jedem String einen Pointer?
Zitat:
Zitat:
Da dürfte eigentlich keine der beiden genannten Fälle auftreten oder? |
Re: Gibt es zu jedem String einen Pointer?
Was sagt dir, dass alle Pointer auf 4 Bytes (oder hatte ein Cardinal 8? Egal, geht um's Prinzip) aligned sind?
Das kann doch auch so aussehen:
Code:
(B steht hier für irgendein byte, die 4 P für einen Pointer)
BPPPP
Code:
Wenn du jetzt bei Position 0 anfängst zu zählen, wirst du den wert hier nicht finden, obwohl er vorhanden ist.
BPPPP
---- Eine blöde Sache in dem Zusammenhang ist auch noch die Endianumrechnung. Denn je nachdem wo du anfängst zu zählen, haben die Bytes unter Umständen eine andere Reihenfolge (hab ich bei meinen kläglichen ROM-Hacking versuchen zu spüren bekommen). |
Re: Gibt es zu jedem String einen Pointer?
Cardinal ist ein machine word, ein Int. Inc(int) == int := int + 1; Inc(pointer) == integer(pointer) := integer(pointer) + sizeof(pointer^).
|
Re: Gibt es zu jedem String einen Pointer?
Es gibt auch relative Adressangaben (zum Beispiel relativ zum Befehlszählregister).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 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