Forum: Sonstige Fragen zu Delphi
Delphi
by Apollonius,
4. Jul 2009
Beim Import per Index wird einfach der Index der Funktion in der AddressOfFunctions-Tabelle plus dem Base-Wert (im Directory verzeichnet) angegeben. Es folgt, dass Import per Index extrem schnell ist.
Forum: Sonstige Fragen zu Delphi
Delphi
by Apollonius,
4. Jul 2009
Die Positionen in den AddressOfFunctions- und AddressOfNames-Tabellen werden durch die AddressOfNameOrdinals-Tabelle vermittelt: Der i-te Name in der AddressOfNames-Tabelle gehört zum NameOrdinals-ten Eintrag in der AddressOfFunctions-Tabelle.
Forum: Sonstige Fragen zu Delphi
Delphi
by Apollonius,
4. Jul 2009
Das Export-Directory liegt normalerweise am Anfang einer Section namens .edata. Der Loader sucht aber nicht nach der Section, sondern nach dem Directory. Der "richtige" Weg verwendet also das Directory; das ist schneller als das Iterieren durch die Sections und funktioniert auch, wenn ein Linker das Export-Directory nicht an den Anfang einer Section namens .edata legt.
Forum: Sonstige Fragen zu Delphi
Delphi
by Apollonius,
4. Jul 2009
Das Export-Directory hat grundsätzlich erstmal nichts mit der Export-Section zu tun (klar, normalerweise liegt das Directory in der Section, aber das ist nicht verpflichtend). Du findest einen Directory Header am Ende des Optional Headers.
Du stehst hier vor dem Problem, eine RVA in einen Dateioffset umzurechnen. Dazu musst du über alle Sections iterieren, überprüfen, in welcher Section die RVA...
Forum: Sonstige Fragen zu Delphi
Delphi
by Apollonius,
4. Jul 2009
Was wäre denn das Problem dabei, einfach die RVAs der exportierten Funktion im Export-Directory und des Entry Points zu vertauschen? Dann muss man keinerlei tiefgreifende Veränderungen in der Datei vornehmen.