Come convertire Hex -> Asm -> C

S

stefan_d6

Guest
Di recente ho lavorare con uC Cygnal e uVision uso o Silabs IDE per scrivere codice.Trovo un firmware di un dispositivo che voglio studiare più a fondo, ma il firmware è in formato BIN che posso facilmente convertire in HEX.Ma non so come convertire in formato ASM e più preferibilmente in C. Ho usato la D51 disassembler per ottenere formato da ASM HEX ma ci sono variabili come rb0r4, rb2r1, ACC, ecc che il compilatore non riconosce.

Così come ottenere il codice facilmente leggibile?

 
Sono quasi inesistenti assembler '51, che non riconosce ACC ...O hai dimenticato di includere un file header con la definizione di standard di SFR, se questo è necessario.

Inoltre è possibile includere un file di un'altra definizione, che definisce i registri direttamente indirizzata, ad esempio,
rb0r4 equ 04h
rb2r1 equ 11h
ecc

Ma quelle posizioni di memoria sono molto probabilmente utilizzati come variabili, quindi si è meglio usare il file di controllo della D52 a definire "leggibile" i nomi di queste locazioni di memoria, in base alla loro funzione nel codice citato.

Infine, anche se una sorta di traduzione ufficiale in C è definitivamente possibile (formalmente è possibile tradurre da qualsiasi lingua in qualsiasi altra lingua), è impossibile recuperare la struttura originaria del linguaggio di alto livello, quindi non avrebbe alcun significato reale ...E 'molto meglio a studiare la versione ASM.

wek

 
OK: ecco qualche estratto dal D52.Vuoi descrivere quello che sta per T3, r6 o acc.7.Dare alcuni consigli sul modo di leggerlo.

Codice:eek:rg 0abh

;

X043f ljmp; 00ab 02 04 3f ..?

;

X00ae: mov t3, # 0deh; 00AE 75 e segg de u. ^

mov t3, # 0adh; 00b1 75 e segg ad u. --

mov 0b1h, # 67H; 00b4 75 B1 67 u1g

X00b7: MOV A, 0b1h; 00b7 e5 B1 E1

JNB acc.7, X00b7; 00b9 30 e7 (fb 0g

clr a; 00BC e4 d

mov R7, A; 00bd ff.

mov R7, A; 00be fe ~

X00b7: inc R7; 00bf 0f.

 
Cari stefan_d6,

Si prega di non sentirsi offeso, ma è forse necessario fare un po 'di base '51 lettura ASM.org 0abh il seguente codice sarà tradotto da 0abh indirizzo

;

X043f ljmp; 00ab 02 04 3F ..? salto in lungo per l'etichetta X043f (all'indirizzo 043fh)

;

X00ae: mov t3, # 0deh; 00AE 75 e segg de u. ^ mov a SFR T3 (all'indirizzo 0FFh) valore immediato 0deh - la funzione di questo SFR dipende dalla particolare '51 derivata si sta utilizzando (e il suo nome potrebbe essere diverso , non t3), questo non è uno standard '52 SFRmov t3, # 0adh; 00b1 75 e segg ad u. - vedi sopramov 0b1h, # 67H; 00b4 75 B1 67 u1g mov a SFR all'indirizzo B1H valore immediato 67H - ancora una volta, il significato di questo SFR dipende dal '51 derivatiX00b7: MOV A, 0b1h; 00b7 e5 B1 E1 valore letto da SFR a 0B1h indirizzo in accumulatoreJNB acc.7, X00b7; 00b9 30 e7 fb 0g (if bit 7 di accumulatori è pari a zero, salta a X00b7 etichetta (in altre parole, le ultime 2 righe significa: loop fino al 7 po 'di SFR 0B1 gets set)clr a; 00BC e4 d accumulatori chiara (a 0)mov R7, A; 00bd ss. spostare i contenuti di accumulatore nel registro R7mov R7, A; 00be fe ~ dittoNaturalmente, questo potrebbe essere (e più probabile è - in base al contenuto strano) un pezzo di dati, tabella o qualcosa di simile - che è esattamente il "significato" che non può essere ricostruita nel livello "alto" automaticamente ...

wek

PS.Quale versione della D52 utilizza?

 
Credo che ci si riferisce a un decompilatore ".Alcuni progetti per l'exe-> C per macchine x86 esiste là fuori.Non ho visto nulla per 8051 però.

 

Welcome to EDABoard.com

Sponsor

Back
Top