Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Delphi Internals: Exception Handling unter 64 Bit?

  Alt 6. Mär 2014, 14:15
Hallo zusammen,

ich habe eine nicht ganz triviale Frage für die Leute, die gerne auch mal etwas unter die Haube schauen. Beim 64 Bit Compiler von Delphi wurde die Art, wie die kompilierten Programme Exceptions handlen laut diversen Quellen komplett überarbeitet.

Bei meinen Nachforschungen habe ich unter anderem festgestellt, dass die generierte PE Datei eine zusätzliche .pdata Section enthält.
Zitat:
The biggest difference in exception handling between Delphi 32 and 64-bit is that in Delphi XE2 64-bit you will gain more performance because of different internal exception mechanism. For 32-bit applications, the Delphi compiler (dcc32.exe) generates additional code that is executed any way and that causes performance loss. The 64-bit compiler (dcc64.exe) doesn’t generate such code, it generates metadata and stores it in the PDATA section of an executable file instead.
Hat jemand hierzu genauere Informationen (Struktur der Daten, Für was werden die zusätzlichen Daten verwendet, Wie werden sie verwendet, etc)?

Hintergrund ist, dass ich eine .dll per Manual Mapping in den Speicher lade und Funktionen daraus aufrufe. Unter 32 bit funktioniert dies mit Delphi DLLs wunderbar. C++ DLLs, welche ohne SafeSEH kompiliert wurden, kann ich sogar unter 32 und 64 Bit erfolgreich laden. Leider führt jeder try..except oder try..finally Block in einer 64 Bit Delphi DLL unmittelbar zu einer non continuable Exception, woraus ich schließe, dass dies mit dem neuen Exception Handling zusammenhängen muss (insbesondere, dass ich beim Mappen die .pdata Section noch parsen und anwenden muss).

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat