Domanda

Come faccio a diff due file binari?

Ho due versioni di un programma, la versione 1 e la versione 2. Ho fatto un piccolo numero di modifiche tra le due versioni, ma purtroppo non sono state il backup regolarmente, e quindi anche se ho la fonte per la versione 2, ho solo il binario della versione 1. ho bisogno di scoprire che cosa, esattamente, ho cambiato tra le due versioni. Ho provato a creare un objdump delle due versioni e quindi utilizzando diff per trovare i cambiamenti, ma che non funziona perché gli offset sono diversi, e così diff considera quasi ogni linea di essere cambiato.

Per esempio, una linea potrebbe essere bgez v0,4074d0<daemonize+0xd4> nella versione 1 e versione 2. bgez v0,4073d4<daemonize+0xd4> in Questi sono copiati direttamente dai file di dump - si possono vedere le due righe fanno la stessa cosa, ma diff non è possibile distinguerli. I file sono troppo grandi da esaminare ogni linea manualmente; Come faccio a rilevare i cambiamenti di funzionalità, ignorando le differenze di compensazione?

È stato utile?

Soluzione 2

fine ho risolto questo rimuovendo le istruzioni prime e marcatori sfalsate così ho avuto solo il gruppo, quindi utilizzando sed per togliere ogni cifra, e filtrando diff ignorare variazioni, solo 1 linea. Sono stato un po 'sorpreso che ha funzionato, ma lo ha fatto.

Altri suggerimenti

E 'possibile. Attualmente sto lavorando su un progetto che è in grado di cercare indirizzi e funzione puntatore di memoria da un file compilato all'interno di un nuovo file binario / modificato. Supporta Windows binari PE e ELF su x86 e x86_64. C'è anche una carta che descrive l'approccio. Funziona bene per il mio progetto di retromarcia, dove devo aggiornare tutti i ganci e gli indirizzi di memoria frequentemente quando gli aggiornamenti binari sono fatti. Ma ci sono altri casi d'uso pure.

verificarlo qui.

Il trucco è che non si basa sul confronto di testo deboli, si smonta i binari e mette a confronto tutte le funzioni misurando la distanza geometrica tra loro utilizzando le metriche del codice.

Risposta breve:. Non puoi

Long risposta:. Scrivere il proprio diff che può ignorare uno o entrambi gli operandi dei codici operativi se sono un valore immediato numerico

You could use sed or awk (or perl or...) to write a filter to make all the offsets identical before running diff. Writing such a filter is left as an exercise to the reader. :-P

Sure something like bsdiff would do the job?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top