try tipos tipo son sirve que personalizada para manejo las instrucciones excepciones excepcion ejemplo catch delphi windows-8 c++builder seh aslr

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