AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Handle bzw. Adresse aus GetWindowLong
Thema durchsuchen
Ansicht
Themen-Optionen

Handle bzw. Adresse aus GetWindowLong

Ein Thema von sirius · begonnen am 8. Mär 2007 · letzter Beitrag vom 8. Mär 2007
Antwort Antwort
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#1

Handle bzw. Adresse aus GetWindowLong

  Alt 8. Mär 2007, 14:53
Meine erste Frage hier im Forum

---- Problemstellung / Erklärung des Bisherigen ----

Ok. Also es ist nicht wirklich meine Frage. Denn es handlet sich um dieses Problem von KoS: "Zugriff auf Image einer externen Anwendung" (bzw. jetzt: Image/Label). Und ab Post #83 hat sich für mich eine Frage gestellt. ( Wer zum Zugriff auf Labels und Images was sagen will, bitte im anderen Thread )

Die Funktion "GetWindowLong" liefert "$FFFF0141" zurück (Also entweder irgendetwas >4Mrd oder -65215 oder etwas ganz anderes). Soweit ist es auch kein Thema. Ich habe einen RemoteThread in einem anderen Process erstellt und betreibe dort mit GetWindowLong und SetWindowLong Subclassing. Läuft alles prima (auch mit dieser Adresse).

Nur jetzt will ich die VCL dieser Anwendung durchstöbern. (KoS hat die Anwednung mit ResHack durchstöbert: Ist höchstwahrscheinlich Delphi und sieht nach VCL aus). Dazu betreibe ich ein wenig Adressrechnung um mich durch die Klassen und Records zu hangeln. Allerdings benötige ich dazu eine klar definierte Startadresse. Und dazu hat sich in Tests an Beispielprogrammen die WindowProc-Funktion des Windows auf der die Labels/Images sind, empfohlen. In den Beispielprogrammen bekam ich die Adresse auch einfach über GetWindowLong. In dem Zielprogramm allerdings nicht mehr, sondern nur $FFFF0141 und die Adressrechnung funktioniert dann nicht mehr.

---- Vermutungen / Ansätze / Ideen / Mutmaßungen ----

Also abgesehen davon, dass in dem Programm die Adressrechnung, wenn überpaupt, eh anders aussehen kann, habe ich noch folgende Gedanken:

1. Die Adresse kann nicht die WndProc sein, denn an der Stelle stehen in dem Process völlig (für mich) sinnlose Befehle. Siehe dazu Anhang im Post #83 des anderen Threads.
2. Es könnte eine relative Adresse sein. Aber dann: zu was relativ: ImageBase, EntryPoint, ThreadBaseAddress?
3. Es ist gar keine Adresse, sondern ein Handle: GWL_WNDPROC: Retrieves the address of the window procedure, or a handle representing the address of the window procedure (MSDN-Library durchsuchenGetwindowLong). Dabei frage ich mich natrülich, wie bringt man in 32 Bit die Info unter, ob es ein Handle oder eine Adresse ist, wenn doch die Adresse selbst 32 Bit breit ist? Da kann man allerdings argumentieren, dass die WndProc sich nur innerhalb der unteren 2 GB befinden kann (weil darüber ja Windows liegt) und demnach 1 Bit für die Info frei ist. Der Wert aus Getwindowlong ist also 'vorzeichenbehaftet' und negatives Vorzeichen ist ein Handle.

Und daraus folgt meine eigentliche Frage: Was mach ich mit dem Handle, wenn es denn ein Handle ist? Ist es von LocalAlloc/GlobalAlloc? Ich kann leider nix testen, da KoS ja das Programm hat. Deswegen hoffe ich auf jemanden der dasselbe Problem hat/hatte. Suchen ist irgendwie ziemlich nervig, wenn man nur "handle", "address", und "getwindowlong" hat.


Ich danke schonmal für Antworten.


PS: Code ist en masse in dem anderen Thread (wenn gewünscht kann ich auch noch den aktuell relevanten CodeTeil hier posten)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Handle bzw. Adresse aus GetWindowLong

  Alt 8. Mär 2007, 18:12
Hallo,

wenn du im PSDK dem Link zu CallWindowProc folgst, dann erfährst du, dass nur diese Funktion mit einem WndProc-Handle umgehen kann.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Handle bzw. Adresse aus GetWindowLong

  Alt 8. Mär 2007, 19:06
Das ist ja interessant. Ein Update der PSDK bringt folgendes zu Tage:

Jetzt heist es nicht mehr "Handle", sondern ganz verheißungsvoll: "a special internal value meaningful only to CallWindowProc."


Edit: Ah, was macht denn die CallWindowProcA da? Schaut ob alle Bits der oberen zwei Bytes voll besetzt sind (als ein AND mit $FFFF0000 und weite CMP mit $FFFF0000 und dann ein JZ).... da schaun wir morgen mal weiter.



Edit 2: Ich mach hier mal ein "beantwortet" rein. Auch wenn es noch nicht ganz gelöst ist, ist zumindest erstmal klar, in welche Richtung man suchen müsste. Ich habe die API-funktionen auch mal debugged, aber ohne einem eigenen Beispiel ist es halt schwer. Ich weis etwa was gerechnet wird, kann es aber nicht testen. Mir fehlt einfach die Möglichkeit, selber so eine WndProc-Adresse zu "erstellen" die eigentlich noch keine Adresse ist.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 08:29 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