Hoe om te zetten Hex -> Asm -> C

S

stefan_d6

Guest
Ik heb onlangs met uC cygnal's en het gebruik uVision of Silabs IDE te schrijven code.Ik een firmware van een apparaat dat ik wil dieper, maar de firmware is in BIN formaat dat kan ik gemakkelijk omzetten in HEX studie.Maar ik weet niet hoe om te zetten in ASM formaat en met meer voorkeur in C. Ik gebruikte de disassembler D51 ASM-formaat te krijgen van HEX maar er zijn variabelen zoals rb0r4, rb2r1, ACC, enz. die de compiler niet herkent.

Dus hoe je gemakkelijk leesbare code?

 
Er is nauwelijks '51 assembler die niet herkent ACC ...Of u vergeten bent om een header-bestand met de standaard sfrs definitie omvatten, indien dit vereist is.

Ook u kunt een andere definitie bestand, waarin de direct aan de orde registers, bijv.
rb0r4 EQU 04h
rb2r1 EQU 11h
enz.

Maar die geheugenplaatsen zijn het meest waarschijnlijk gebruikt als variabelen, dus je bent beter af met behulp van de controle-dossier van D52 om "leesbaar" namen voor deze geheugenplaatsen, afhankelijk van hun functie in de genoemde code.

Tot slot, hoewel een soort van officiële vertaling in het C definitief mogelijk is (formeel is het mogelijk om te vertalen van een taal in een andere taal), is het onmogelijk om te herstellen van de oorspronkelijke structuur van de taal op hoog niveau, dus het is geen echte betekenis zou hebben ...Het is veel beter om de studie van de ASM-versie.

wek

 
OK hier is een uittreksel van de D52.Wilt u beschrijven wat staat voor T3, R6 of acc.7.Geef enkele tips hoe om het te lezen.

Code:eek:rg 0abh

;

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

;

X00ae: mov T3, # 0deh; 00ae 75 ev de u. ^

mov T3, # 0adh; 00b1 75 ev advertentie 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.

 
Geachte stefan_d6,

Gelieve niet beledigd voelen, maar je misschien behoefte aan een aantal fundamentele '51 ASM lezing doen.org 0abh de volgende code wordt vertaald op het adres van 0abh op

;

ljmp X043f; 00ab 02 04 3f ..? verspringen naar etiket X043f (op het adres 043fh)

;

X00ae: mov T3, # 0deh; 00ae 75 ev de u. ^ MOV naar SFR T3 (op het adres 0FFh) onmiddellijke waarde 0deh - de functie van dit SFR hangt af van de '51 afgeleide u gebruikt (en zijn naam zou kunnen worden verschillende niet T3), dit is niet een standaard '52 SFRmov T3, # 0adh; 00b1 75 ev advertentie u. - zie hierbovenmov 0b1h, # 67H; 00b4 75 b1 67 u1g mov naar SFR op adres B1H onmiddellijke waarde 67H - nogmaals, de zin van deze SFR is afhankelijk van uw '51 afgeleideX00b7: mov a, 0b1h; 00b7 e5 b1 e1 lezen waarde van SFR op het adres 0B1h in accuJNB acc.7, X00b7; 00b9 30 e7 fb 0g (if bit 7 van de accu nul is, spring naar label X00b7 (met andere woorden, de laatste 2 regels verstaan: lus tot bit 7 van SFR 0B1 wordt ingesteld)clr a; 00bc e4 d duidelijk accumulator (ingesteld op 0)mov r7, a; 00bd ff. verplaatsen inhoud van de accu in het register r7mov R7, a; 00be fe ~ idemNatuurlijk kan dit worden (en waarschijnlijk is - op basis van de vreemde inhoud) een stuk van de gegevens, een tafel of iets dergelijks - dat is precies de 'zin' die niet kunnen worden gereconstrueerd in de "hoog niveau" automatisch ...

wek

PS.Welke versie van D52 gebruikt u?

 
Ik denk dat je doelt op een "decompiler".Sommige projecten voor exe-> c voor x86 machines bestaan die er zijn.Ik heb niets gezien voor 8051 wel.

 

Welcome to EDABoard.com

Sponsor

Back
Top