Saturday, 7 October 2017

0x23 In Binary Option


¿Alguien tiene una idea de cómo compilar de forma estática cualquier archivo de recursos directamente en el archivo ejecutable o el archivo de biblioteca compartida usando GCC Por ejemplo Id como agregar archivos de imagen que nunca cambian (y si lo hacen, Id tiene que reemplazar el archivo de todos modos) y wouldnt quieren Que se encuentran en el sistema de archivos. Si esto es posible (y creo que es porque Visual C para Windows puede hacer esto, también), ¿cómo puedo cargar los archivos que se almacenan en el propio binario ¿El archivo ejecutable se analiza, encontrar el archivo y extraer los datos de Quizás hay una opción para GCC que todavía no he visto. El uso de motores de búsqueda realmente no escupir las cosas adecuadas. Necesitaría esto para trabajar en bibliotecas compartidas y ejecutables ELF normales. Cualquier ayuda es apreciada Da algo como: Para la compatibilidad con otro código, puede utilizar fmemopen para obtener un objeto FILE regular, o bien std :: stringstream para hacer un iostream. Std :: stringstream no es grande para esto sin embargo y usted puede por supuesto apenas utilizar un puntero dondequiera usted puede utilizar un iterador. Si está usando esto con automake no se olvide de establecer BUILTSOURCES adecuadamente. Lo bueno de hacerlo de esta manera es: Obtener texto, por lo que puede ser en el control de versiones y parches sensatamente Es portátil y bien definido en cada plataforma respondió Feb 1 11 at 16:04 Actualización He crecido a preferir el control John Ripleys asamblea. incbin solución basada ofrece y ahora utiliza una variante en eso. He utilizado objcopy (GNU binutils) para enlazar los datos binarios de un archivo foo-data. bin en la sección de datos del ejecutable: Esto le da un archivo de objeto foo-data. o que puede enlazar en su ejecutable. La interfaz C se parece a algo así, puede hacer cosas como Si la arquitectura de destino tiene restricciones especiales en cuanto a dónde se almacenan los datos constantes y variables, o si desea almacenar esos datos en el segmento. text para que encajen en el mismo tipo de memoria Como su código de programa, usted puede jugar con los parámetros objcopy un poco más. Respondió Feb 1 11 at 16:36 good idea En mi caso no es muy útil. Pero esto es algo que realmente voy a poner en mi recopilación. Gracias por compartir este ndash Atmocreations Feb 1 11 at 18:04 It39s un poco más fácil de usar ld como el formato de salida está implícito allí, vea stackoverflow / a / 4158997/201725. Ndash Jan Hudec Mar 11 14 at 18:40 Puede incrustar archivos binarios en ejecutable mediante ld enlazador. Por ejemplo, si tiene el archivo foo. bar, puede incrustarlo en ejecutable, agregando los siguientes comandos a ld Si está invocando ld a través de gcc, entonces tendrá que agregar - Wl Aquí --formatbinary le dice al enlazador que el siguiente archivo es Binario y --formatdefault vuelve al formato de entrada predeterminado (esto es útil si especifica otros archivos de entrada después de foo. bar). A continuación, puede acceder al contenido de su archivo desde el código: También hay un símbolo llamado binaryfoobarsize. Creo que es de tipo uintptrt pero no lo comprobé. Recientemente tuve la necesidad de incrustar un archivo en un ejecutable. Desde Im trabajando en la línea de comandos con gcc, et al y no con una herramienta de RAD de fantasía que hace que todo suceda por arte de magia no era inmediatamente obvio para mí cómo hacer que esto suceda. Un poco de búsqueda en la red encontró un hack a esencialmente gato en el final del ejecutable y luego descifrar donde se basa en un montón de información que no quería saber. Parecía que debería haber una mejor manera. Y hay, su objcopy al rescate. Objcopy convierte archivos de objetos o ejecutables de un formato a otro. Uno de los formatos que entiende es binario, que es básicamente cualquier archivo que no está en uno de los otros formatos que entiende. Así que probablemente has previsto la idea: convertir el archivo que queremos incrustar en un archivo de objeto, entonces simplemente se puede vincular con el resto de nuestro código. Digamos que tenemos un nombre de archivo data. txt que queremos incrustar en nuestro archivo ejecutable: Para convertirlo en un archivo de objeto que podemos enlazar con nuestro programa simplemente utilizamos objcopy para producir un archivo. o: Esto le dice a objcopy que nuestra entrada File está en el formato binario, que nuestro archivo de salida debe estar en el formato elf32-i386 (archivos de objeto en el x86). La opción --binary-architecture indica a objcopy que el archivo de salida está destinado a ejecutarse en un x86. Esto es necesario para que ld acepte el archivo para vincular con otros archivos para el x86. Uno podría pensar que especificar el formato de salida como elf32-i386 implicaría esto, pero no lo hace. Ahora que tenemos un archivo de objeto sólo tenemos que incluirlo cuando ejecutamos el enlazador: Cuando ejecutamos el resultado obtenemos la oración por la salida: Por supuesto, no he contado toda la historia todavía, ni mostró que main. c. Cuando objcopy realiza la conversión anterior, agrega algunos símbolos de vinculador al archivo de objeto convertido: Después de enlazar, estos símbolos especifican el inicio y el final del archivo incrustado. Los nombres de símbolos están formados por el prefijo binario y añadiendo inicio o fin al nombre del archivo. Si el nombre de archivo contiene caracteres que no son válidos en un nombre de símbolo, se convierten en subrayados (por ejemplo, data. txt se convierte en datatxt). Si obtiene nombres no resueltos al enlazar usando estos símbolos, haga un hexdump - C en el archivo de objeto y observe el final del volcado para los nombres que objcopy eligió. El código para usar el archivo incrustado ahora debería ser razonablemente obvio: Una cosa importante y sutil a tener en cuenta es que los símbolos agregados al archivo de objeto no son variables. No contienen datos, sino que su dirección es su valor. Los declaro como tipo char porque es conveniente para este ejemplo: los datos incrustados son datos de caracteres. Sin embargo, se podría declarar como algo, como int si los datos son una matriz de enteros, o como struct foobart si los datos eran cualquier matriz de foo bares. Si los datos incrustados no son uniformes, entonces char es probablemente el más conveniente: tome su dirección y lance el puntero al tipo correcto a medida que recorre los datos. Una buena opción para crear cadenas con datos binarios para guardar (por ejemplo, guardar una sentencia de sql en un archivo) en archivos de texto o código php es hacer lo siguiente: campo ltphp campo bin2hex (campo) campo chunksplit (Campo 2. x) campo x. Substr (campo 0, - 2) gt esto convertirá su campo (binario o no) en hexadecimal y luego convertir el hex en una cadena que se puede colocar en un archivo php: FFFFFFFF - gt xFFxFFxFFxFF En respuesta a Patrik: Manera de imprimir un número en binario es usar baseconvert (). Lt echo baseconvert (bin, 10, 2) gt Si lo necesitas para imprimir todos los 32 bits (como lo hace tu función) puedes simplemente apagarlo: echo strpad (baseconvert (bin, 10, 2), 32, STRPADLEFT) gt La conversión es desde la base 10 porque cuando bin pasa a baseconvert (), se convierte en una cadena y la representación predeterminada es decimal. Espero que esto ayude. Algunos dieron una función para convertir un código hexadecimal de nuevo en un texto simple (legible por el usuario ASCII: P) Algunos más dio una función que hace uso de bin2hex para convertir URLs en algo como 123456 Aquí es una función para ir desde el formulario 123456 de nuevo en ASCII Observe que esta función se puede cambiar fácilmente para transformar cualquier código hexadecimal en ASCII lt función hex2text (str) str explode (, str) arrayshift (str) nmlstr foreach (str como hexstr) nmlstr. Chr (baseconvert (hexstr, 16, 10)) return nmlstr gt espero que esto ayude :) Regards - Tsuna Esperemos que esto ayude a alguien. Simplemente muestra una representación html de datos hexadecimales, al igual que un visor hexadecimal. (Columnas columnCount) (columnas columnCount column) column column column column column column column column column column column column column column column column column column column column column column column column column column column column column column column ) LineCount columnCount 0 foreach (líneas como línea) return lttrgtlttd alignrightgt. BytePosition. : Lt / tdgt para (n 0 n lt columnas n) return lttdgt. Strtoupper (bin2hex (línea n)). Lt / tdgt return lttdgt ampnbspampnbspampnbspampnbspampnbspampnbspampnbspampnbsp lt / tdgt para (n 0 n lt columnas n) return lttdgt. (Htmlentities (línea n).htmlentities (línea n).mpnbsp). Lt / tdgt return lt / trgt bytePuesta bytePosition columnas return lt / tablegt return implode (return) gt Esta función lo deshace (convierte nuevamente en ASCII). Ltphp función hex2asc (myin) para (i 0 i lt strlen (myin) / 2 i) myout. Chr (basconvert (substr (myin. I 2. 2), 16. 10)) return myout gt Estaba viendo lo anterior y con una pequeña modificación, surgió lo siguiente que creo que es más flexible: Función ltphp bin2hex (Datos) corregidos eregreplace (0-9a-fA-F. Datos) paquete de devolución (H. strlen (corregido), corregido) gt Esto asegurará que todo lo que pase, incluso si está acolchado en las extremos o entre pares , Debe devolver el archivo deseado. Binario como recurso para el proyecto bull quot (0) 0 bull 1 Estoy queriendo incluir un archivo binario binario gráfico en mi aplicación C y no he encontrado de todos modos para hacer esto con el IDE LPCXpresso como un administrador de recursos. ¿Puede alguien explicar cómo podría incluir el archivo binario en mi árbol de proyecto como un recurso que se vinculado en el proyecto y la memoria flash asignado que podría ser accedido160by mi aplicación para una operación de transferencia de datos El único por qué sé ahora now160 es escribir un Aplicación de PC que abrirá el archivo binario y creará y generará un módulo C que define una matriz inicializada con los datos. 160160 Contenido del archivo 160binary en hexadecimal: 02234323590AFFE0 Tiene que haber una manera Xpresso podría manejar el archivo binario como un recurso que se codifica a Flash en la construcción Gracias de antemano-

No comments:

Post a Comment