scripts script resueltos programa operaciones manejo espaƱol ejercicios ejemplos ejecutar desde comandos cadenas aritmeticas bash unix binary dump

resueltos - Script Bash que contiene ejecutable binario



scripts linux ejercicios resueltos (6)

¡Claro que lo es!

Por ejemplo, puedes volcar cualquier binario en un archivo con:

echo $binary > file

Hay muchos scripts de instalación que hacen cosas como esa.

¿Es posible escribir un script bash, que contendría un programa binario ejecutable dentro?

Me refiero a un script, que contendría un volcado de un ejecutable en una forma textual, que será volcado a un ejecutable por este script cuando se ejecute.

Me gustaría conocer una solución que funcione de la caja sin necesidad de instalar paquetes adicionales. ¿Es posible?

¡Gracias!


Entonces, si lo hice bien, ¿quiere incluir un binario en su script y ejecutarlo en la salida del script?

Aquí hay un script binarymaker (Esto no solo crea un script que extrae un binario, sino que combina cualquier script con cualquier binario):

#!/bin/bash lineCount=$(wc -l "$1" | cut -f 1 -d '' '') # just get the line count ((lineCount+=2)) # because we are going to append a line head -n 1 "$1" > "$3" # this is done to ensure that shebang is preserved echo "trap ''tail -n +$lineCount /$0 > binary; chmod +x binary; ./binary'' EXIT" >> "$3" tail -n +2 "$1" >> "$3" cat "$2" >> "$3" exit 0

Debes ejecutarlo así

./binarymaker myscript mybinary resultscript

Si ejecuta el resultscript se ejecutarán tanto myscript como mybinary . Opcionalmente, puede agregar un comando para rm el binario posteriormente.

Además, no olvides salir al final de tu script porque de lo contrario continuará e intentará analizar datos binarios.

Si está trabajando con otra secuencia de comandos y no con un archivo binario, entonces se puede ejecutar desde una tubería como esta:

tail -n +$lineCount /$0 | source /dev/stdin

Pero no va a funcionar en binarios reales. Además, no funciona si tu versión de bash es menor de 4


No reinvente la rueda como sugieren muchas otras respuestas, solo use el venerable comando shar que está haciendo esto por diseño.

Suponiendo que el archivo que desea incrustar en su secuencia de comandos es binaryfile , simplemente ejecute

$ shar binaryfile > binaryfile.shar

y estás listo. Usted tiene un script de shell llamado binaryfile.shar que al ejecutarse extraerá binaryfile .


Probé esto y funciona. Hex se generó con xxd.

#!/bin/bash xxd -r >foo <<''EndHere'' 0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............ 0000010: 0200 3e00 0100 0000 e003 4000 0000 0000 ..>.......@..... 0000020: 4000 0000 0000 0000 000a 0000 0000 0000 @............... 0000030: 0000 0000 4000 3800 0800 4000 1e00 1b00 [email protected]...@..... 0000040: 0600 0000 0500 0000 4000 0000 0000 0000 ........@....... 0000050: 4000 4000 0000 0000 4000 4000 0000 0000 @.@.....@.@..... ... 0001960: 6400 5f65 6461 7461 006d 6169 6e00 5f69 d._edata.main._i 0001970: 6e69 7400 nit. EndHere chmod +x foo ./foo


Puede convertir su binario en texto, y luego volver a binario usando uuencode / uudecode.

http://linux.die.net/man/1/uuencode

De modo que puede almacenar sus datos binarios como texto en su secuencia de comandos y enviarlos a un archivo binario.

uuencode binaryFile> output.txt

Y luego ponga esos datos en su secuencia de comandos y al crear el archivo binario use uudecode.


nunca he hecho algo así antes;) esto compilará alguna fuente c, creará una b.bash comandos b.bash contenga el b.bash binario (y la secuencia de comandos original para el desarrollo simple)

(avergonzar)

#!/bin/bash if [ "$0" == "b.bash" ];then tail -n +$[ `grep -n ''^BINARY'' $0|cut -d '':'' -f 1` + 1 ] $0 | base64 -d > a2.out chmod +x a2.out ./a2.out echo $? exit fi cat "$0" > b.bash echo "BINARY" >> b.bash cat > a.c << EOF int main(){ return 12; } EOF gcc a.c base64 a.out >> b.bash

invocar con (a.bash genera b.bash):

bash a.bash ;bash b.bash

No sé cómo evadir escribir el binario en un archivo temporal antes de la ejecución ...