Ver Mensaje Individual
  #2  
Antiguo 11-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Lo que dices puede hacerse (que yo sepa, por ejemplo) mediante el uso de archivos de recursos. Concretamente haciendo uso de un recurso del tipo "RT_RCDATA".

Los pasos ha seguir serían los siguientes:
  1. Crear un archivo de recursos con al menos uno de tipo "RT_RCDATA" con un programa como XN Resource Editor
  2. Nombrar dicho recurso de manera que después podamos identificarlo claramente.
  3. Incluir en el ejecutable el archivo de recursos creado mediante la correspondiente directiva para el compilador.
  4. Actualizar el contenido de dicho recurso mediante las funciones BeginUpdateResource, UpdateResource y EndUpdateResource.
Algunas cosas a tener en cuenta son:
  1. No podemos (yo no sé cómo) eliminar el recurso del ejecutable, es decir, si su contenido aumenta, el peso del ejecutable lo hará en proporción: aunque luego "borremos" el contenido del recurso el mismo ocupará el espacio "máximo" ocupado previamente.
  2. El contenido del recurso se guarda "en claro" en el ejecutable. Con el programa mencionado anteriormente, por ejemplo, podría accederse al contenido del recurso.
  3. El ejecutable no podrá ser comprimido, al menos no con UPX (Ultimate Packer for Executables), que es con lo que lo he intentado. Si se comprime el ejecutable este se corromperá si actualizamos el recurso de marras.
  4. No es posible actualizar un recurso de un ejecutable en uso, esto es, no es posible (que yo sepa) actualizar el recurso de nuestro ejecutable desde el propio ejecutable. Tiene que ser otro programa el que lo haga, cuando el ejecutable en cuestión no esté en uso.
Adjunto un sencillo ejemplo (en realidad unas pruebas) sobre todo esto. se trata de dos programas de tipo consola. Uno es el que contiene un determinado recurso del tipo que estamos tratando. El otro programa puede ejecutarse de modo que actualize el dato contenido en el recurso del primero.

En el caso del ejemplo que adjunto y a modo de prueba, lo que se actualiza en el ejecutable es una supuesta "fecha de compilación". De este modo es fácil ver cómo se actualiza el contenido del recurso: lo que se verá es la fecha y hora actuales... cada segundo el dato es susceptible de cambiar.

Si tienes alguna duda ya sabes dónde estamos. Ya dirás qué te parece de todo esto.
Archivos Adjuntos
Tipo de Archivo: zip Fecha de compilación.zip (1,6 KB, 39 visitas)
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 11-06-2006 a las 15:32:22.
Responder Con Cita