ASM z HEX

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

ASM z HEX

#1 Příspěvek od samec »

Je nejaká rozumná možnosť preložiť HEX kód z ROM do Asembleru? Je to asi 50kB pre procesor MC68HC16Z1. Aspoň nejakú úvodnú inicializačnú sekvenciu. Potrebujem zistiť, čo všetko si to zariadenie pri inicializácií kontroluje, aby som vedel hľadať chybu, prečo to zariadenie nenabehne.
https://www.nxp.com/docs/en/product-bri ... 16Z1TS.pdf
Přílohy
ROM.zip
(20.26 KiB) Staženo 1237 x

Uživatelský avatar
microlan
Příspěvky: 1646
Registrován: 09 kvě 2017, 02:00
Bydliště: Kósek vod Brna

#2 Příspěvek od microlan »

IDA pro

Uživatelský avatar
mihal
Příspěvky: 1812
Registrován: 06 dub 2005, 02:00
Bydliště: Zilina

#3 Příspěvek od mihal »

Na adrese FFFF je reset vektor na štart programu, podľa inštrukčného setu si to vyskladaj, adresy periférií máš v datasheete. Má to jeden 16b adresný priestor.

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#4 Příspěvek od samec »

IDA Pro nemám, ani zbytočné stovky dolárov. To nie nevzerá ako rozumné riešenie.

Na FFFF už nič nie je. Dáta končia na C07F. Alebo som niečo nepochopil?
Naposledy upravil(a) samec dne 24 úno 2021, 11:44, celkem upraveno 1 x.

Uživatelský avatar
mihal
Příspěvky: 1812
Registrován: 06 dub 2005, 02:00
Bydliště: Zilina

#5 Příspěvek od mihal »

Prepáč to je už HC16ka, to už má trochu inú štruktúru, má to banky pamäti. Reset tu je v banke 0 na začiatku, PC skáče na adresu ktorá je v 00002.
edit: bacha adr priestor je 20bitový.

petrfilipi
Příspěvky: 2551
Registrován: 13 zář 2005, 02:00

#6 Příspěvek od petrfilipi »

No myslím si, že tohle není HEX z procesoru, resp. pro jeho naprogramování. BIN soubory jsou standardně image nějaké paměti, kde je nejen vlastní program, ale i různá nastavení.
HEX třeba pro PIC vypadá třeba takto. Je pak samozřejmě přeložitelný zpět do ASM, i když bez dobré znalosti assembleru je to neskutečná pakárna se v tom vyznat. Všechny proměnné jsou nahrazeny čísly registrů apod. I jednoduchý příklad ve vyšším jazyku má poměrně složité vyjádření v ASM.

PF

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#7 Příspěvek od samec »

Nie je to originál BIN, asi som to nevhodne pomenoval. Je to cez Arduino načítaný obsah M29F040B.

Ale už to začína dávať zmysel. Najprv som nechápal, čo znamenajú tie čísla na adrese 0. Takže po reštarte to ide na asresu 408 a pri nejakom inom blbom prerušení na adresu 400. Na 408 z toho zatiaľ lezú normálne inštrukcie. Na 400 je NOP a potom nejaké nezmysly? Už sa teším, jak sa do toho zahryznem cez dlhé zimné večery. Lepšie jak krýžovky, či sudoku. :)

Uživatelský avatar
mihal
Příspěvky: 1812
Registrován: 06 dub 2005, 02:00
Bydliště: Zilina

#8 Příspěvek od mihal »

Preštuduj si to adresovanie, niektoré inštrukcie pracujú s 16b len v rámci bloku, skoky budú 20b, to sa bude blbo prepisovať. Ale pôjde to. Nemáš tých 50kilo len nultý blok?

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#9 Příspěvek od samec »

Skopíroval som komplet celú pamäť (19-bitová adresa), ale dáta sú len na začiatku. Viď priložený súbor.

Uživatelský avatar
Guggy
Příspěvky: 66
Registrován: 17 říj 2006, 02:00

#10 Příspěvek od Guggy »

IDA pro se da nahradit opensource toolem Ghidra od NSA

Kód: Vybrat vše

https://ghidra-sre.org/

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#11 Příspěvek od samec »

Načo je dobrá taká inštrukcia? Prečo +2?

Kód: Vybrat vše

Mnemonic   Operation          Description            Address   Opcode   Operand   Cycles
TSZ        Transfer SP to Z   (SK:SP) + 2 => ZK:IZ   INH       276F     -         2

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#12 Příspěvek od lesana87 »

Že by na vytvoření rámce na lokální proměnné v zásobníku? A +2 by mohlo být o tom, jestli SP ukazuje na poslední uloženou položku nebo na prázdné místo v zásobníku.

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#13 Příspěvek od samec »

Snažím sa rozlúštiť ten strojový kód. Zo začiatku to šlo celkom dobre, dokonca z toho vypadlo zopár užitočných informácií, ale potom začali nezmyselné inštrukcie a ja mám pocit, že robím niečo zle, že som asi niečo nepochopil.
sekvencia od adresy 04E0.

Kód: Vybrat vše

Load 0x06 => B
Transfer B => EK
Transfer (SK:SP) + 2 => ZK:IZ
Jump to Subroutine   (tie dva riadky celkom dole)
Test D for Zero or Minus   (v D je teraz 0x0001, takže nie je Zero)
Long Branch if Equal  (čiže ak je Zero, čo nie je, takže nič, zbytočný kód)
Load 0x06 = >B
Transfer B => YK
Load 0x07FC => IY  (ďalej nepoužité, prepísané o pár krokov nižšie)
Load 0x4D24 => D  (ďalej nepoužité, prepísané o pár krokov nižšie)
Load 0x0000 => IX  (ďalej nepoužité, prepísané o pár krokov nižšie)
Load 0x00 => B
Transfer B => XK
Load 0xAE88 => IX
Load 0x0000 => IY
Load 0x07FC => D

subroutine:
Load 0x0001 => D 
Return from Subroutine

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#14 Příspěvek od samec »

Môžu byť tie nezmyselné inštrukie nejakou sofistikovane-primitívnou ochranou proti dekompilácií?

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#15 Příspěvek od lesana87 »

Tak může to být nějaká forma obfuskace kódu, ale stejně dobře to můžou být data, která ti disassembler chybně přeložil jako instrukce. Záleží na chytrosti a nastavení toho disassembleru.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“