2008-12-04 27 views
6

¿Es posible editar recursos de un ejecutable en tiempo de ejecución mediante programación? ¿Si es así, cómo? Si no, ¿hay otro programa que pueda usarse fácilmente para modificar recursos?C++ modificar recursos en tiempo de ejecución

Gracias, Derek.

+0

¿Te refieres a los recursos de Windows? Esto es específico de la plataforma, ¿sí? –

Respuesta

0

Sí, es posible, aunque no especialmente fácil. Básicamente, requiere escribir un compilador de recursos (al menos para los tipos de recursos que desea modificar).

Por ejemplo, una vez escribí un compilador de menú que tomó su entrada de una base de datos en tiempo de ejecución (en ese momento guardó el resultado en la base de datos). Si las tablas fuente no se modificaron, se utilizó el recurso existente, de lo contrario, se reconstruyó.

En el caso de los recursos del menú (y creo que los diálogos) el truco es que ciertos miembros solo están presentes dependiendo de la configuración de la bandera, así como los estrictos requisitos de alineación.

En el caso de modificar recursos ya presentes en su .exe, debería copiar los datos de recursos en un búfer de memoria (con espacio adicional disponible si está agregando nuevos elementos) (utilizando FindResource, LockResource, una copia de memoria luego UnlockResource).

Después de realizar los cambios, utilice una de las funciones de creación indirecta (es decir, CreateMenuIndirect) y pase la dirección del búfer.

La API de recursos permite escribir dicho búfer en el binario de la aplicación, pero eso rompería la firma si usa la firma de código, así que tenga mucho cuidado. Tampoco sé si esa API funciona para un programa que realmente se está ejecutando.

Cuestiones relacionadas