Ich vermute mal, dass er einen IAT Hook basteln will, um alle Aurufe einer bestimmten
API aus der kernel32.dll heraus auf einen eigenen Callback umzulenken
Jenau! Schrieb ich ja auch schon. Und zwar geht es um die äußerst unzuverlässigen Funktionen um verschiedene Ressourcentypen zu laden, bzw. die Funktion aus ntdll.dll welche als Unterbau benutzt wird. Damit will ich die Auswahl der richtigen Sprache in einem Modul gewährleisten. Microsoft hat nämlich leider alles rund um Sprachauswahl bis Windows Vista (exklusive) verbockt. Daher auch immer deren Empfehlung die einzelnen Sprachen in separate DLLs mit jeweils nur einer Sprache auszulagern. Das Problem wurde nämlich erst mit Windows Vista zuverlässig gelöst.
Klingt für mich eigentlich korrekt was du machst
Hier mal ein Auszug aus einem C-Programm von mir, was über die Imports iteriert und beim Fund einer übergebenen Adresse den Namen ausgibt
Danke, bis auf die Tatsache, daß ich bei den Thunks die RVAs aus der Liste einzeln in VAs übersetze, ist mein Code funktionell identisch. Vermutlich sind die Linker so vernünftig die IMAGE_THUNK_DATA-Records direkt als lückenlose Liste hinzupappen, weshalb es auch geht nur die RVA zum ersten zu übersetzen und beim Rest halt jeweils sizeof(IMAGE_THUNK_DATA) dazu.
Ach ja, ich sollte noch erwähnen, daß ich halt RtlImageRvaToVa benutze, aber auch geprüft habe, daß die Rückgabewerte Modul+RVA entsprechen (du machst die Berechnung ja inline).
Und das Wunder der
DP hat mal wieder zugeschlagen.
Das ist aber ein nettes Kompliment an Zacherl. Und in der Tat bin ich auch immer wieder von seinen fundierten Antworten begeistert. Die machen Freude.
Also vielen Dank Zacherl, dann nehme ich an daß es u.U. an Windows 7 liegt. Ich werde mir das nochmal auf früheren Versionen zu Gemüte führen, schließlich existiert das zu lösende Problem nur auf Windowsversionen vor Vista.