AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Gibt es zu jedem String einen Pointer?
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es zu jedem String einen Pointer?

Ein Thema von Neutral General · begonnen am 29. Sep 2008 · letzter Beitrag vom 30. Sep 2008
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Gibt es zu jedem String einen Pointer?

  Alt 29. Sep 2008, 21:12
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:
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;
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 )

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Gibt es zu jedem String einen Pointer?

  Alt 29. Sep 2008, 21:43
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
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Gibt es zu jedem String einen Pointer?

  Alt 29. Sep 2008, 21:45
Zitat von Hawkeye219:
Der Text könnte beispielsweise auch ein ShortString mit einem führenden Längenbyte sein.
Oder der Zeiger wird zur Laufzeit aus einer Startadresse und einem Offset in eine String-Tabelle (resourcestring) berechnet.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Gibt es zu jedem String einen Pointer?

  Alt 29. Sep 2008, 21:50
Zitat von Hawkeye219:
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
Zitat von jbg:
Zitat von Hawkeye219:
Der Text könnte beispielsweise auch ein ShortString mit einem führenden Längenbyte sein.
Oder der Zeiger wird zur Laufzeit aus einer Startadresse und einem Offset in eine String-Tabelle (resourcestring) berechnet.
Es handelt sich ja um die Caption eines Labels. Also Quasi TCustomLabel.FCaption.
Da dürfte eigentlich keine der beiden genannten Fälle auftreten oder?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Gibt es zu jedem String einen Pointer?

  Alt 29. Sep 2008, 22:57
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:
BPPPP
(B steht hier für irgendein byte, die 4 P für einen Pointer)
Code:
BPPPP
----
Wenn du jetzt bei Position 0 anfängst zu zählen, wirst du den wert hier nicht finden, obwohl er vorhanden ist.

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).
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: Gibt es zu jedem String einen Pointer?

  Alt 29. Sep 2008, 23:45
Cardinal ist ein machine word, ein Int. Inc(int) == int := int + 1; Inc(pointer) == integer(pointer) := integer(pointer) + sizeof(pointer^).
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Gibt es zu jedem String einen Pointer?

  Alt 30. Sep 2008, 10:15
Es gibt auch relative Adressangaben (zum Beispiel relativ zum Befehlszählregister).
  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 06:22 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