Herramienta binaria diff para archivos muy grandes?

Necesito una utilidad para distinguir dos archivos binarios. Los archivos son grandes (6-50 GB).

Nota: Debe señalarse específicamente aquí: la mayoría de los progtwigs de diferencias funcionan al mapear el archivo en su espacio de direcciones virtuales. En Windows de 32 bits, esto limita el tamaño de los archivos que se pueden comparar con menos de 1 GB cada uno. (1.5 GB si Windows se ejecuta con el modificador / 3GB, y el progtwig ha anunciado que tiene 3 GB de conocimiento; / LARGEADDRESSAWARE). Si un progtwig insiste en la técnica de mapear el archivo completamente en su espacio de direcciones, entonces debe ser recomstackdo como una aplicación de 64 bits, que tiene un espacio de direcciones de 8 TB (que cumple mis requisitos)

Beyond Compare es mi herramienta de diferencias favorita, y la tengo, pero no puede manejar archivos binarios sobre lo que puede caber en el espacio de direcciones del proceso.

HexDiff 3.0 parecía interesante, excepto que la versión de prueba no hace diff.

  • la herramienta debe ser gratuita, ya que no estoy pagando dinero para descubrir que no funciona.

  • la herramienta debe ser una aplicación de Windows.

  • la herramienta no debe estar basada en la consola (es decir, una aplicación de Windows)

  • la herramienta debe ser gráfica (es decir, una aplicación de Windows)

Está buscando HxD el mejor y libre Hex-Editor para Windows, no se necesitan cambios desde el 3 de abril de 2009, ya que está libre de errores, simplemente perfecto.

Su “Comparación de archivos (simple)” ( Ctrl + K ) lo hace visual para cualquier archivo binario.

  • Apertura instantánea independientemente del tamaño del archivo (hasta 8EB) 8 ExaByte son 8 millones de TeraByte.

((bsdiff es masivamente élite :), aparte de eso)

Personalmente me gusta el vbindiff (modo SUA) para archivos pequeños y he probado beta este bloque de herramientas (WPF de Windows, cliente gratuito, costo para la alimentación de red), que puede hacer coincidencias de sub-secciones muy rápidas sobre espacios de búsqueda de contenido grandes, ser lanzado pronto

Si está ejecutando archivos ejecutables diferentes (nativos), PatchDiff2 (la herramienta es gratuita, IDA es $) es un complemento IDA que le proporcionará una precisión superior al 90-95%, sin problemas, incluso con variaciones en la optimización u otras configuraciones.

BinNavi , ($) es otra herramienta que funciona bastante bien.

Si desea calificar la similitud de los binarios, STAN (funciona en modo SUA), puede cortar la BS proverbial rápidamente para obtener una apuesta segura.

Solo por razones de integridad, relacionado con bsdiff es el nuevo algoritmo de Google para su navegador Chrome, parece que Courgette ha mejorado bsdiff en una cantidad justa, será agradable ver qué tan bien se puede adaptar a otros formatos, parece aprovechar en gran medida un búsqueda optimizada de tabla de símbolos y lo que parece ser (no se ha leído el código) una mejora que se obtendría al usar punteros basados ​​(es decir, no usar direcciones lineales, sino simplemente usar la compensación en una notación compatible como sea posible).

La forma tradicional de hacerlo es con “cmp –verbose” (equivalentemente, “cmp -l”). Agregue el indicador “–print-bytes” (o “-b”) para representar los diferentes bytes en un formato legible (además de los valores decimales y los números de bytes proporcionados por el indicador “–verbose”). Dado que sus archivos son tan grandes, es probable que desee poner la salida en un archivo para que pueda verlo y tener los resultados para analizar en su tiempo libre. Por ejemplo, compararé dos archivos MP3 similares:

$ cmp --verbose --print-bytes a.mp3 b.mp3 | tee differences 16315 302 MB 115 M 16316 233 M-^[ 144 d 16317 110 H 224 M-^T 

. . . .

 21601545 377 M-^? 300 M-@ 21601546 203 M-^C 0 ^@ 21601547 300 M-@ 0 ^@ 

(Cite los nombres de sus archivos apropiadamente, por supuesto, cmp entiende el indicador “-” si lo necesita. Puede escribir “cmp -lb” en lugar de usar los argumentos largos.) Use wc para ver cuántos bytes difieren:

 $ wc --lines differences 66115 differences $ wc --bytes a.mp3 b.mp3 21602502 a.mp3 21602502 b.mp3 43205004 total 

cmp solo compara archivos byte a byte (no puede resincronizar si se insertan o eliminan bytes), pero eso parece ser exactamente lo que necesita. Puede manejar archivos arbitrariamente grandes (y no necesita más memoria que para archivos pequeños). Se encuentra de forma predeterminada en Mac OS X, los diversos BSD y Unices, y GNU / Linux, es decir, todos los SO modernos ampliamente utilizados excepto Windows. (Considere una instalación mínima de Cygwin o equivalente si esto realmente es una restricción).

Aunque esta parece ser la herramienta adecuada para el trabajo, está excluida por dos de sus criterios: está “basada en la consola” y no tiene componentes gráficos. Creo que debe haber algo que falta en la descripción de su problema. ¿Puedes explicar por qué una consola sería problemática y qué datos adicionales necesitas visualizar?

Puedes probar xdelta . Nunca he buscado una versión de GUI pero puede probar esta (aunque parece ser solo KDE).

He estado usando WinMerge muy felizmente para mostrar las diferencias en los archivos binarios. También es gratis una fuente abierta.

De lo contrario, sus archivos son muy grandes y es posible que no quepan en una herramienta de diferencias: ¿ha considerado generar un parche binario (por ejemplo, .ppf, archivo de parche de Playstation) y simplemente echarle un vistazo a eso?

Trabajo para ECMerge , si busca una herramienta de diferenciación y no un “delta”, es decir, entender la diferencia es más importante que tener una representación compacta, hace lo que quiere. Prácticamente no existe límite en el tamaño del archivo (alrededor de cien en tera bytes), solo en el conteo de las diferencias para evitar diferencias patológicas (por ejemplo, miles de millones de diferencias).

Sus últimos tres requisitos hacen que este sea un problema difícil. ¿Qué le ofrecería un progtwig gráfico de Windows que un progtwig de consola basado en texto no podría? Entonces, no hay muchas herramientas que hagan lo que quieres. Así que voy a ignorar los últimos tres, tomar mi karma en mis manos, y sugerir rdiff. Está basado en texto y consola. Pero puede diferir archivos binarios de tamaño arbitrario. Puede obtener rdiff para Windows a través de Cygwin ( http://cygwin.com ).

Me encontré con esto en busca de una herramienta recursiva de comparación de archivos binarios mejor que las que ya uso.

Conozco uno que puede adaptarse a sus necesidades. La única forma en que fallaría sería en el tamaño de los archivos, pero vale la pena intentarlo. Se llama Windiff y viene con diferentes versiones de herramientas de Windows / paquetes de expansión / como se llamen. He descubierto que funciona bastante bien.

puedes probar vbindiff, http://www.cjmweb.net/vbindiff/

es una aplicación de consola, sin embargo está muy bien hecha, así que la considero gráfica; obtendrás una pantalla dividida que muestra los dos archivos uno al lado del otro en hexadecimal.

está diseñado para manejar archivos de gran tamaño, estoy buscando archivos de 2 8GB en este momento.

Puedes probar con hexdiff si se comstack en Windows. Está basado en la consola, pero tiene salida gráfica, y vi diferencias entre dos archivos de 5 GB sin problemas

Esta es otra recomendación para HxD http://mh-nexus.de/en/hxd/ – Solo lo usé para diferenciar dos archivos MXF de 3 GB para validar dónde se estaba produciendo la corrupción de un fotogtwig. La operación duró unos 10 segundos, mientras que Araxis Merge (mi tradicional y muy querida herramienta diff) logró consumir toda la memoria de la máquina y aún no funcionó para esta operación.

Como los archivos son tan grandes y es probable que tenga más que algunas diferencias, el diff será demasiado grande para caber en cualquier cosa que las aplicaciones estándar de Windows puedan ejecutar. Entonces mi enfoque sería:

  • Convierte los archivos a texto. Utilice un descargador hexadecimal de línea de comando o, mucho más útil, escriba un pequeño progtwig que comprenda qué significan los datos binarios, de modo que pueda comparar datos significativos en lugar de desperdicios de bit.

  • Use una herramienta de línea de comando diff (como la de cygwin ). Las herramientas de línea de comandos de GNU pueden procesar archivos arbitrariamente grandes.

  • Verifica el resultado con less . Podría argumentar que querrá ver todas las diferencias, pero a menos que sea un extraterrestre en forma humana, su cerebro ni siquiera puede mantener el contenido de una pantalla completa llena de texto en su memoria de trabajo. Entonces, si realmente quieres lograr algo, debes reducir la cantidad de datos que tienes para mirar.