IsBadReadPtr richtig verwenden
-
die Funktion macht nicht weiter als einen try/catch-Block (SEH) anzulegen, indem es dann auf die Speicheradresse zugreift und eine eventuelle Zugriffsverletzung abfängt (genauer gesagt testet sie immer den Zugriff auf das erste Byte jeder Page die im spezifizierten Bereich liegt).
-
Das ist sowieso eine der Funktionen die man nicht verwenden sollte, weil dadurch unerwünschte Dinge passieren können.
Also "richtig" verwenden: garnicht
-
http://support.microsoft.com/kb/960154
http://blogs.msdn.com/larryosterman/archive/2004/05/18/134471.aspx
Fazit: Nicht verwenden!
-
There's no point improving the implementation of a bad idea: http://blogs.msdn.com/oldnewthing/archive/2007/06/25/3507294.aspx
-
Jochen Kalmbach schrieb:
http://support.microsoft.com/kb/960154
http://blogs.msdn.com/larryosterman/archive/2004/05/18/134471.aspx
Fazit: Nicht verwenden!Man könnte als Ersatz mit VirtualQuery arbeiten und anhand der memory protection bits entscheiden, ob der Zugriff erlaubt ist.
-
bool IsBadCodeIdea(LPCTSTR szYourIdea);
Pass in a string expressing your idea for IsBadXXXPtr() fixes. At present it always returns true.
-
general bacardi schrieb:
Man könnte als Ersatz mit VirtualQuery arbeiten und anhand der memory protection bits entscheiden, ob der Zugriff erlaubt ist.
Und welches Ziel willst Du damit erreichen? Du weisst dann immer noch nicht, ob die Daten dor auch *Sinnvoll* sind!
-
Jochen Kalmbach schrieb:
general bacardi schrieb:
Man könnte als Ersatz mit VirtualQuery arbeiten und anhand der memory protection bits entscheiden, ob der Zugriff erlaubt ist.
Und welches Ziel willst Du damit erreichen? Du weisst dann immer noch nicht, ob die Daten dor auch *Sinnvoll* sind!
Das nicht, aber immerhin kann ich sie lesen und riskiere keine Exception. Nach dem Lesen kann ich möglicherweise besser entscheiden, ob sie sinnvoll sind.
-
Na dann viel Spaß mit Deinem "möglicherweise"!
-
Jochen Kalmbach schrieb:
Na dann viel Spaß mit Deinem "möglicherweise"!
Es mag Fälle geben, bei denen man Daten im Speicher suchen und ihre Plausibilität prüfen muß. Auch wenn wir beide uns auf Anhieb keinen vorstellen können.

-
Ein Beispiel für die Notwendigkeit von IsBadReadPtr ist z.B. ein PE-Viewer. Solange man nur "normale" PE-Dateien untersucht, gibt es keine Probleme. Ist die PE-Datei allerdings UPX-komprimiert, dann kann man schnell mal in's Leere greifen (insbesondere bei den Ressourcen). Ohne Gültigkeitsprüfung der ermittelten Adressen hagelt es Schutzverletzungen ohne Ende.