IAT/INT korrekt auslesen

Hallo Liebe Community !

Ich versuche mich gerade an IAT Hooking und programmiere mir eine kleine Bibliothek. Ich suche zunächst mit OpenProcess() -> NtQueryInformationProcess() die IAT in dem remote Image (beliebiger laufender x86 Prozess) und will dann über ReadProcessMemory() die IAT bzw. INT Array auslesen.

Nun habe ich ein Problem, denn wie kann ich wissen wie viel Speicher ich auf ein Mal Lesen soll, ohne nen ERROR_INVALID_ADDRESS (487) zu kausieren, denn ich kenne die Länge des IAT/INT-Arrays nicht?

Natürlich könnte ich die ArrayElemente der IAT/INT Elementeweise einlesen und dann aufhören wenn ich zum zeroed-out struct komme, doch dies scheint mir ziemlich perfomancelastig und unschön im Anbetracht der Tatsache dass die Lib dann auch benutzt werden soll und nicht nur als kleine Spielerei fungieren soll...

An sich habe ich das gleiche Problem mit dem IMAGE_IMPORT_DESCRIPTOR Array.

Gibt es eine elegantere Lösung, als die Arrays Elementeweise einzulesen?

Danke für die Hilfe :)

PS: Ich dachte daran an die PageSize mittels VirtualQueryEx() zu gelangen, um dann mindestens so viel Speicher zu lesen wie da ist (wenn mehr als eine von mir festgelegte, unwahrscheinlich zu übertreffende Obergrenze lesbar ist, soll die Obergrenze als Maximum gelten), damit ich nur ein mal ReadProcessMemory aufrufen muss und dabei sicher gehen kann dass die ganzen Arrays eingelsen sind...

Ich hoffe ihr versteht was ich meine :(
 
Zurück
Oben