elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Empaquetar imagenes , archivos etc.. en el ejecutable[c++]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Empaquetar imagenes , archivos etc.. en el ejecutable[c++]  (Leído 2,462 veces)
jorge245

Desconectado Desconectado

Mensajes: 14



Ver Perfil
Empaquetar imagenes , archivos etc.. en el ejecutable[c++]
« en: 4 Mayo 2018, 23:12 pm »

Es que e visto juegos y programas que contienes sus archivos o algunos de ellos, dentro del ejecutable. algo asi como un Appimage.


« Última modificación: 5 Mayo 2018, 00:12 am por jorge245 » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Empaquetar imagenes , archivos etc.. en el ejecutable[c++]
« Respuesta #1 en: 5 Mayo 2018, 01:33 am »

Cualquier lenguaje de programación que se precie, dispone de 'recursos' que precisamente lo que hacen es eso que reclamas, empaquetar en el ejecutable (o quizás en un fichero aparte), los recursos que el propio ejecutable pueda necesitar, desde iconos, imágenes, cadenas de texto, hasta fuentes, etc...

Si el lenguaje que acostumbras a usar, no dispusiera de ello, o bien quieres apañártelas por tu cuenta de forma independiente, la mejor forma es disponerlo es:

1 Generar  el ejecutable y una vez hecho,
2 con otro programa (para ese reciso propósito), 'pegar detrás' los  diferentes recursos que precises, al tiempo vas generando una estructura de datos con la info precisa, que es lo que se endosa al final del ejecutable... el ejecutable debe estar diseñado para leer de sí mismo, del final esa estructura, reconocerla y saber interpretar su contenido.

sea tu ejecutable esto: cvbbmtur834
sea que quieres añadir 3 imágenes, (imaginemos que fueran así de grandes-pequeñas en realidad):  ert intghj poq245bmrt
sea que además quieres añadir un icono, por ejemplo: prty
sea además que guardas cierto contenido en texto, por ejemplo 74try5
sea que añades otras cosas, más... verás que es más de lo mismo.

Entonces te diseñas tu estructura:

Código:
enumeracion TiposDeRecursos
    RECURSO_TEXTO = 0
    RECURSO_ICONO = 1
    RECURSO_IMAGEN = 2
    ...etc...
fin enumeracion

Estructura recursos
    byte Tipo  // como enumeracion TipoDerecursos
    entero NumBytes
Fin estructura

Array de recursos rc(0 a 3 + 1 + 1 -1) //3 imagenes + 1 icono + 1 texto

Pegar detras del ejecutable: cvbbmtur834,ert,intghj,poq245bmrt,prty,74try5  
// las comas se ponen solamente para que se vea claramente la separación.
El array tendrá estos datos:
Rc(0).Tipo = 2          // imagen 1  
Rc(0).NumBytes= 3  // ert

Rc(1).Tipo = 2          // imagen 2  
Rc(1).NumBytes= 6  // intghj

Rc(2).Tipo = 2          // imagen 3  
Rc(2).NumBytes= 10   // poq245bmrt

Rc(3).Tipo = 1          // icono  
Rc(4).NumBytes= 4  // prty

Rc(4).Tipo = 0          // texto
Rc(4).NumBytes= 6  // 74try5

Pegas ahora el array detrás de todo.
y de momento queda así:
cvbbmtur834ertintghjpoq245bmrtprty74try5,2,3,3,6,2,10,1,4,0,6

Nuevamente las comas solo tienen el propósito de aclaración y los valores numéricos aquí son textuales, lógicamente deberían ser valores de 1 o más bytes, aquí para explicar de forma clara con texto legible, algún valor tiene 1 o 2 caracteres.
Finalmente pegas el tamaño de elementos del array, que es: 5   (3 imágenes + 1 icono + 1 texto)
Y así tu ejecutable será finalmente esto:
cvbbmtur834ertintghjpoq245bmrtprty74try523362101406,5

Tu ejecutable deberá ser capaz de leer del final un entero que identifica el tamaño del array que irá desde 0 hasta n-1
A continuación deberá ser capaz de leer más atrás de esa última posición precisamente el contenido de ese array.
Y finalmente partiendo de los valores de ese array y los desplazamientos razonados, el recurso que interese...

Realmente toda esa operatoria es más sencilla y cómoda programarla sobre un fichero aparte que sobre el propio ejecutable (podría además escribirlo justo en orden inverso, primero la cantidad del array, luego el contenido del array y luego cada recurso (eso sí éstos en el mismo orden que allí).

Pero sería un fichero aparte, y si es imprescindible que deba ser sobre el propio ejecutable, esa es la solución. Solamente recuerda que el propio ejecutable debe ser capaz de reconocerlo.
Y que para evitar errores, añade un 'magic' al final del propio fichero... si aparece el 'magic' tiene recursos incrustados, si no se olvidó añadirlos o el ejecutable fue alterado-dañado.
El 'magic' es casi cualquier cosa que tu pretendas que sea como significativo de 'contiene recursos al final del ejecutable según tu formato descrito', lo ideal es usar 4-8 caracteres específicos, que ni por casualidad puedan ser parte del contenido volcado, por ejemplo podría ser el texto: RECURSOS, así tu  ejecutable finalmente tendría el ejecutable, las 3 imágenes, 1 icono, 1 texto, el array de datos, el tamaño del array y el magic, y quedaría así al final:
cvbbmtur834ertintghjpoq245bmrtprty74try5233621014065RECURSOS


« Última modificación: 5 Mayo 2018, 01:40 am por NEBIRE » En línea

jorge245

Desconectado Desconectado

Mensajes: 14



Ver Perfil
Re: Empaquetar imagenes , archivos etc.. en el ejecutable[c++]
« Respuesta #2 en: 7 Mayo 2018, 23:48 pm »

Muchas gracias por responderme.y si puedes podrías por favor escribirme sobre como funciona eso del pegado atrás del ejecutable.
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 811


¡ Hiperfoco !


Ver Perfil WWW
Re: Empaquetar imagenes , archivos etc.. en el ejecutable[c++]
« Respuesta #3 en: 8 Mayo 2018, 00:50 am »

Muchas gracias por responderme.y si puedes podrías por favor escribirme sobre como funciona eso del pegado atrás del ejecutable.

Pero si lo explicó perfecto e incluso bién detallado, solo tenés que abrir el archivo de tu ejecutable y poner al final de este los datos de otros archivos... En tu programa que va a contener dichos archivos lo programás para que se lea así mismo para encontrar los datos de imágenes, sonidos, etc... y hacer a tu antojo lo que sea necesario.

(...)la mejor forma es disponerlo es:

1 Generar  el ejecutable y una vez hecho,
2 con otro programa (para ese reciso propósito), 'pegar detrás' los  diferentes recursos que precises, al tiempo vas generando una estructura de datos con la info precisa, que es lo que se endosa al final del ejecutable... el ejecutable debe estar diseñado para leer de sí mismo, del final esa estructura, reconocerla y saber interpretar su contenido.(...)


B#
En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines