So, jetzt kann man auch eingebaute Funktionen verwenden, um z.B. Adressen zu mappen:
Code:
PVirtualAddress = pointer<UInt32, UInt32, RVAToFilePointer>
Erstes UInt32 ist die Adress-breite, zweites ist das Ziel des Pointers (hier wieder ein UInt32), und RVAToFilePointer ist die Funktion die Berechnungen mit der Adresse anstellen kann.
Hier wird die eingebaute Funktion RVAToFilePointer aufgerufen um die Adresse (eine RVA/relativ virtual address) in der
PE-Datei in einen absoluten File-Offset zu übersetzen.
Man kann jetzt also die Data-Directories in der
PE-Datei wie folgt definieren, und der Strukureditor wird sie somit automatisch finden und richtig anzeigen, alles deklarativ:
Code:
IMAGE_DATA_DIRECTORY = struct {
VirtualAddress: PVirtualAddress;
Size: UInt32;
}