Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi Internals: Exception Handling unter 64 Bit? (https://www.delphipraxis.net/179430-delphi-internals-exception-handling-unter-64-bit.html)

Zacherl 6. Mär 2014 14:15

Delphi Internals: Exception Handling unter 64 Bit?
 
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

Zacherl 6. Mär 2014 21:14

AW: Delphi Internals: Exception Handling unter 64 Bit?
 
Bin selbst auf die Lösung gekommen. Ein einfacher MSDN-Library durchsuchenRtlAddFunctionTable Aufruf reicht, um die Exception Table auf den aktuellen Programmkontext anzuwenden.

JamesTKirk 7. Mär 2014 06:25

AW: Delphi Internals: Exception Handling unter 64 Bit?
 
Delphi hält sich einfach nur an das Exception Handling, welches unter Win64 vorgeschrieben ist. Für mehr Informationen empfehle ich dir diese Links:
Ich hoffe das füllt ein wenig den Hintergrund, auch wenn du schon eine Lösung gefunden hast. :)

Gruß,
Sven

Zacherl 7. Mär 2014 12:19

AW: Delphi Internals: Exception Handling unter 64 Bit?
 
Interessanter Lesestoff. Danke dir :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz