Come rendere i salti assoluti relativi?

1

Dato che ho un assembly assembly x86 disassemblato in una lista di strutture che lo descrivono completamente (opcode, regs, imm, ecc.), come posso girare a livello di programmazione i salti assoluti ai salti relativi?

Fondamentalmente quello che cerco di ottenere è che posso inserire o eliminare byte tra il salto e la destinazione e successivamente correggere il salto semplicemente aggiungendo il delta ad esso.

    
posta Benjoyo 18.04.2015 - 23:26
fonte

1 risposta

5

Iniziamo distinguendo tra codice assemblaggio e codice macchina . Questi sono spesso visti come qualcosa di molto simile, e lo sono, ma c'è un passaggio tra il linguaggio assembly e il linguaggio macchina - quello dell'assembler.

Le persone non lavorano più nel codice macchina (hanno fatto lungo fa) è troppo doloroso. Lavorare con un assemblatore ti dà la possibilità di usare etichette e, in alcuni casi, opcode di livello più alto. L'assemblatore può quindi tradurre le etichette e gli opcode di livello superiore in codice macchina.

Quando si disassembla un binario, si ottiene la traduzione del codice macchina in assembly. Ma non tutte le informazioni per il montaggio sono lì. In particolare, le etichette non sono lì. Senza le etichette, si salta e si leggono gli indirizzi corretti. Questo è ciò che l'assemblatore ha convertito l'assembly iniziale in codice macchina.

Se vuoi recuperare le etichette, devi aggiungerle. Passare attraverso ed etichettare ogni indirizzo che viene utilizzato come target di salto o diramazione. Quindi converti ogni uso di quell'indirizzo nell'etichetta e vai avanti da lì. Ricorda che devi aggiungere tutti delle etichette e farlo perché cambierai idea. Aggiungendo un'istruzione o due vicino alla parte superiore, sposterà tutto dopo di esso in un nuovo indirizzo.

    
risposta data 19.04.2015 - 18:25
fonte

Leggi altre domande sui tag