¿Significado de parchear files binarys?

Estoy tratando de entender lo que significa parchear files binarys en un ejemplo de la página de xxd de xxd :

 Patch the date in the file xxd.1 % echo "0000037: 3574 68" | xxd -r - xxd.1 % xxd -s 0x36 -l 13 -c 13 xxd.1 0000036: 3235 7468 204d 6179 2031 3939 36 25th May 1996 
  1. ¿Significa editar files binarys, o es como en Wikipedia?

    Un parche es una pieza de software diseñada para solucionar problemas 1 con, o actualizar un progtwig de computadora o sus datos de soporte.

  2. ¿Cómo difieren xxd y el patch , y son similares?
  3. ¿Qué intenta hacer el ejemplo?

Parchear un file significa modificarlo, con la connotación de que la modificación generalmente es pequeña. El uso proviene del uso general de inglés, donde un parche es una pequeña modificación (por ejemplo, en un trozo de tela). Cuando se trata de files, un parche no siempre es una reparación.

Un parche es una serie de instrucciones que describen cómo modificar un file o un set de files. En el mundo de Unix, un parche suele ser el resultado del command diff , que describe los cambios en un file de text. Un parche en este sentido describe las modificaciones en términos de agregar, eliminar o modificar líneas en los files. La utilidad de patch aplica estas instrucciones para modificar un file o set de files. Intenta ser inteligente al aplicar varios parches al mismo file, ya que el primer parche podría causar cambios que impiden que el segundo se aplique porque el file ya no está en el estado esperado. Debido a que diff y patch basan fuertemente su operación en líneas, no son muy adecuados para files binarys.

xxd es una utilidad genérica para trabajar con files binarys. Una de sus capacidades es hacer modificaciones en un file. Por ejemplo, el command xxd -r - xxd.1 significa aplicar las modificaciones descritas en la input estándar. El parche de ejemplo (es decir, las instrucciones de modificación) 0000037: 3574 68 significa: comenzando en el desplazamiento 0x37 (es decir, 55 en decimal), reemplace los siguientes tres bytes por 0x35, 0x74 y 0x68 (es decir, los tres caracteres 5th ).

Cuando aplica un parche a un file, está sobrescribiendo parte de él con datos actualizados (un parche también puede include datos adicionales hasta el final). Puede parchar cualquier tipo de file, ya sea de text, binary o lo que sea, ya que todos los files son flujos de bytes cuando se trata de ello.

Las partes que se supone que se sobrescribirán se especifican en el file de parche.

Si una solución de software implica la actualización de un file, un parche puede modificar el file para que sea el mismo que una versión completa de un file actualizado. Como los parches no son el file completo, sino solo las diferencias, los parches serán más pequeños, consumirán less espacio en disco y consumirán less ancho de banda cuando se descarguen.

La edición directa de un file binary en un editor hexadecimal (como hexer ) a veces se denomina parche "manual".

No estoy familiarizado con xxd , pero parece que, a partir de la búsqueda preliminar, xxd puede generar una list de volcado o hexadecimal de datos binarys, y también puede convertir dicha list nuevamente en binary directo. Entonces puedes volcar el hex con xxd , editarlo con vim u otro editor de text, y escribir cambios con un xxd -r . También puede canalizar una cadena usando echo en xxd "formatting hexdump". (Otras opciones le permiten realizar cambios en el file binary. Parece que xxd tiene muchas opciones que le permiten especificar dónde comenzar y dejar de sobrescribir o aplicar parches).

El primer command en el ejemplo básicamente le xxd a xxd que cambie los bytes en el file xxd.1 comenzando en el desplazamiento 0x0000037 a 0x35 0x74 0x68 (ASCII para "5to"). xxd puede leer su propio formatting "hexdump" y eso es lo que proporciona el command "echo" a xxd .

El segundo command en el ejemplo está volcando un conteo ( -c ) de 13 bytes en el file comenzando en ese mismo desplazamiento.

El command patch hace algo similar, pero quiere files en formatting "diff". Puede crear un file diff guardando el resultado del command diff , que comparará dos files y expressá las diferencias en dicho formatting de diferencia. Al leer la página man , parece que el parche es más para cambiar los files de text que el binary directo.

En los microcontrolleres, a veces tiene progtwigs que alteran la memory del progtwig, es decir, el progtwig en sí. Se podría decir que el progtwig "muta" cuando se ejecuta.

Esta es solo una explicación para alterar las aplicaciones binarias.

De hecho, utiliza parches binarys con bastante frecuencia en progtwigs de microcontrolleres. Como su progtwig es un código de máquina, y la mayoría de las veces está progtwigndo en ensamblador, el código de máquina ensamblado es una representación bastante directa de lo que ha estado progtwigndo. Entonces, una vez que su código está ensamblado, simplemente proporciona parches a la memory del progtwig del microcontroller o parte de ella.