AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Prüfen, ob PChar einen Ordinalwert enthält?
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen, ob PChar einen Ordinalwert enthält?

Ein Thema von Zacherl · begonnen am 22. Feb 2014 · letzter Beitrag vom 24. Feb 2014
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Prüfen, ob PChar einen Ordinalwert enthält?

  Alt 22. Feb 2014, 15:07
Hallo zusammen,

gibt es eine Standard-Vorhergehensweise, um zu prüfen, ob ein P(Ansi)Char Wert als Ordinalwert gebraucht wird? GetProcAddress erlaubt ja beispielsweise PAnsiChar Werte in dieser Form zu [strike]miss[/strike]ge-brauchen. Auch Resourcen können auf diesem Wege adressiert werden.

Folgendes habe ich öfters mal gefunden:
IsOrdinal := (NativeUInt(PCharValue) shr 16) = 0; Hier wird impliziert, dass der PChar nur bei Verwendung von mehr als 16 Bits einen validen Pointer enthalten kann.

Kann man das so nehmen, oder gibt es hier eventuell irgendeine Art von Vorgabe von MS selbst?

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Prüfen, ob PChar einen Ordinalwert enthält?

  Alt 22. Feb 2014, 22:43
Warum sollte man denn einen Ordinalwert darin speichern?

Aber ja, das ist dokumentiert. Du kannst den niedrigsten Wert mit GetSystemInfo auslesen:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Damit erhältst du unter anderem lpMinimumApplicationAddress. Und das ist normalerweise zumindest bei 32 Bit Systemen $00010000, woher auch der von dir genannte Test rührt. Du könntest auch den Systemwert abfragen und schauen, ob dein Wert niedriger ist.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Prüfen, ob PChar einen Ordinalwert enthält?

  Alt 24. Feb 2014, 01:01
Wunderbar danke dir! Auf die Idee lpMinimumApplicationAddress aus der SystemInfo Struct zu prüfen, bin ich noch gar nicht gekommen.

Ich selbst will keinen Ordinalwert als PChar speichern, muss aber überprüfen, ob ich an diversen Stellen Ordinalwerte übergeben bekomme. Im EnumResources Callback war das beispielsweise notwendig.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (24. Feb 2014 um 01:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Prüfen, ob PChar einen Ordinalwert enthält?

  Alt 24. Feb 2014, 01:38
Wenn nicht etwas sehr verrücktes abgeht, sollte es niemals valide Pointer unter 2^12 = 4096 geben. Die erste Page wird vom OS vernünftigerweise auf invalid gesetzt, damit man einen Pagefault erhält, wenn man einen Nullpointer dereferenziert. Hurra für Null-Pointer-Exceptions

Im EnumResources Callback war das beispielsweise notwendig.
Man kann sich auch die Beschreibung von IS_INTRESOURCE angegucken.
Da es ein Macro ist, wird sich der Wert vermutlich auch nicht so schnell ändern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Prüfen, ob PChar einen Ordinalwert enthält?

  Alt 24. Feb 2014, 01:59
Man kann sich auch die Beschreibung von IS_INTRESOURCE angegucken.
Da es ein Macro ist, wird sich der Wert vermutlich auch nicht so schnell ändern.
Danke! Ich wusste, dass es da irgendwo ein Macro gibt, aber mir war leider der name entfallen Der Beschreibung nach sollten 16 Bit dann wohl auch ausreichen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 12:43 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