Stránka 1 z 2

ASM z HEX

Napsal: 24 úno 2021, 10:36
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

Napsal: 24 úno 2021, 10:40
od microlan
IDA pro

Napsal: 24 úno 2021, 11:20
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.

Napsal: 24 úno 2021, 11:34
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?

Napsal: 24 úno 2021, 11:43
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ý.

Napsal: 24 úno 2021, 11:52
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

Napsal: 24 úno 2021, 11:59
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. :)

Napsal: 24 úno 2021, 12:25
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?

Napsal: 24 úno 2021, 12:33
od samec
Skopíroval som komplet celú pamäť (19-bitová adresa), ale dáta sú len na začiatku. Viď priložený súbor.

Napsal: 25 úno 2021, 12:45
od Guggy
IDA pro se da nahradit opensource toolem Ghidra od NSA

Kód: Vybrat vše

https://ghidra-sre.org/

Napsal: 11 bře 2021, 20:10
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

Napsal: 11 bře 2021, 20:24
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.

Napsal: 12 bře 2021, 21:12
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

Napsal: 13 bře 2021, 16:12
od samec
Môžu byť tie nezmyselné inštrukie nejakou sofistikovane-primitívnou ochranou proti dekompilácií?

Napsal: 13 bře 2021, 16:52
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.