Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





DEP (Prevención de Ejecución de Datos)

Iniciado por fiero, 04 de Agosto de 2007, 07:30:59 AM

« anterior - próximo »

fiero

Hola guys,

Problema:
Me he dado cuenta de que mi programa no es compatible con DEP. Para el que no lo sepa DEP es una función que viene con XP SP2 y Vista que previene la ejecución de código en segmentos de memoria de datos. Esto es muy bueno para evitar la ejecución de la mayoría de virus, ya que casi todos utilizan bugs de desbordamiento de buffers y cosas así para ejecutar "código malicioso" (como lo llaman los entendidos)

Antecedentes:
Resulta que mi programa es un motor 3D por software, y en el núcleo del motor lo que hago es generar el código de pintado de triángulos de forma dinámica, es decir, construyo el bucle en un buffer de memoria de datos, añadiendo cada instrucción en ensamblador y luego lo ejecuto. Esto es hiper-rapido y además es muy facil de mantener. Esto lo hago así porque el numero de opciones que puede tener el bucle es enorme, que si con/sin Z buffer, con/sin bilinear, con/sin antialiasing, con/sin blending, con/sin iluminacion, etc. etc., además a cada una de estas opciones hay que añadir que la textura sea de 8, 15, 16, 24 o 32 bits, y que el buffer de pantalla sea de 8, 15, 16, 24 o 32 bits, con lo cual, el bucle interno de pintado de triángulos se llena de "cases" y/o de "if". Teniendo en cuenta que todas estas bifurcaciones se ejecutan al renderizar cada pixel, el rendimiento global del motor se puede ir al carajo.

Solución:
La solución podria ser reservar memoria de programa en tiempo de ejecución (no de datos). He buscado, pero no encuentro nada.

¿Alguien que sepa algo de esto? ¿O quizás no es posible?

Muchas gracias!
www.videopanoramas.com Videopanoramas 3D player

ethernet

Lo raro es que los antivirus no te dieran un aviso.

fiero

Hombre, ya sé que suena guarro, "generar código en un buffer y ejecutarlo", pero nunca ningún antivirus dijo nada todos estos años.

En fin, voy a cambiarlo todo por llamadas a pequeñas rutinas a ver si no baja mucho el rendimiento.

un saludo
www.videopanoramas.com Videopanoramas 3D player

senior wapo

Yo generaba código escribiendo los bytes en un buffer de datos y luego llamaba a VirtualProtect poniendo PAGE_EXECUTE y variantes READ/WRITE.

¿ Dices que eso ya no funciona ?

fiero

Si que funciona!!!!!!  :D  ¡¡Gracias senior wapo!!

Ayer estube buscando en las MSDN y en google por "reservar segmento de código" "reservar memoria para ejecución de código", y cosas parecidas, tambien en inglés, y no conseguí encontrar la función VirtualProtect (y eso que está en el grupo de funciones tan conocidas como ZeroMemory).

Funciona perfecto con el DEP activado en XP, voy a probar en Vista, pero me parece que no abrá problemas.

Lo dicho, muchas gracias!  :D
www.videopanoramas.com Videopanoramas 3D player

senior wapo

De nada, pero cuéntame más sobre ese motor 3D software.

¿Que capcidades, prestaciones y limitaciones tiene? Ando buscando algo parecido.

fiero

El motor 3D es el plugin para visualización de fotografias panorámicas de mi empresa www.devalvr.com . Básicamente es solo un renderizador de triángulos, no tiene ninguna de las otras cosas que debería tener un motor 3D, pero por lo menos me da una compatibilidad hacia atrás, de tal manera que el visor funciona en un WindowsNT 4 sin DirectX.

Ahora estoy añadiendo DX9 y OpenGL, para seguir avanzando en cosas que requieren más velocidad de render.

saludos!
www.videopanoramas.com Videopanoramas 3D player






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.