delphi - tipos - Habilitar el manejo seguro de excepciones en C++ Builder
try catch para que sirve (2)
Para la certificación de aplicaciones de Windows 8, existen (entre otros) estos requisitos:
- 3.2 Su aplicación debe compilarse utilizando el
/SafeSEH
para garantizar el manejo seguro de excepciones - 3.3 Su aplicación debe compilarse utilizando el
/NXCOMPAT
para evitar la ejecución de datos - 3.4 Su aplicación debe compilarse utilizando el
/DYNAMICBASE
para la aleatorización de diseño de espacio de direcciones (ASLR)
No pude averiguar cómo habilitar ninguno de estos en C ++ Builder XE.
Para /NXCOMPAT
y /DYNAMICBASE
, uno puede usar editbin.exe
de VS o peflags.exe
de Cygwin. Aunque me sentiría más seguro acerca de posibles efectos secundarios, si hubiera una manera nativa de habilitarlos.
De todos modos, estoy totalmente en pérdida con respecto a /SafeSEH
.
En primer lugar, / SafeSEH solo se aplica a x86, no a x64 o a ARM. Requiere que el compilador genere tablas adicionales que indiquen las direcciones de las funciones que se consideran manejadores de excepciones válidos por razones de seguridad. Existe una pequeña posibilidad de que pueda hacerlo usted mismo, pero requeriría que observe la cadena de gestión de excepciones fs:0
en su código de ensamblado compilado y enumere todas las direcciones que alguna vez se inserten en esa cadena, luego descríbalas como documentadas aquí: http : //msdn.microsoft.com/en-us/library/9a89h429 (v = VS.80) .aspx . Hay una (pequeña) posibilidad de que su código no tenga controladores, y están todos en el tiempo de ejecución de C ++ Builder (podría facilitar que el tiempo de ejecución sea una DLL separada).
Debería intentar convencer a C ++ Builder de que actualice su compilador para que sea compatible con SafeSEH. Ha existido en la plataforma de Windows desde XP SP2, y conecta un agujero de seguridad bastante desagradable (las direcciones del manejador de excepciones existen en la pila en x86, solo esperando un desbordamiento de búfer para poner allí cualquier dirección aleatoria que se ejecute)
Para el problema relacionado con /NXCOMPAT
y /DYNAMICBASE
, he creado una solicitud para el enlazador C ++ Builder para que admita estos indicadores aquí: https://quality.embarcadero.com/browse/RSP-13072
Usar editbin.exe
desde Visual C ++ no es una solución ideal, y su enlazador debe ser compatible con estas banderas de forma nativa.
ACTUALIZACIÓN : Se ha creado una solicitud adicional aquí para que los archivos de tiempo de ejecución C ++ Builder / Delphi (DLL / BPL) se distribuyan con estos indicadores ya establecidos, para evitar tener que usar EDITBIN desde Visual C ++ para establecerlos usted mismo: https: / /quality.embarcadero.com/browse/RSP-13231