<html><body>Dobry den,<br><br>kedysi to vedeli balicky C prekladacov od Hi-Techu. Mali v sebe asembler, ktory vedel optimalizovat asm zdrojaky. Aspon sa tym chvalili vo svojich marketingovych letacikoch. Zial odkedy sa kupili s Microchipom, robia uz len PIC, a myslim, ze aj ich povodne produkty sa uz asi tiez moc nevyvyjaju.<br><br>Druha stranka je ta, ze to ma asi nejaky hlbsi dovod, preco to koduju tak, ako to koduju. Myslim, ze sme to tu niekolkokrat rozoberali, zial hladat v archive nie je take jednoduche ako rychlo listovat v poznamkovom zosite...<br><br>Myslim si, ze vymysliet funkcionalitu a nejaky algoritmus je totiz jedna vec a naprogramovat ho s ohladom na rozne normy a rozne featury vec druha. To sa Vam totiz moze stat, ze Vas sw vytvor sa dostane do ruk roznych "sliedicov, snoricov a kazisvetov" - jednym slovom reverznych inzinierov - a budu sa Vam potom za chrbtom nahlas smiat, ze ani len tu jednoduchu SPI zbernicu neviete naprogramovat... A budu si o Vas, samozv
anom expertovi, pri pive spievat rozne pesnicky a vypravat vtipy. A potom pochopite, ze neviete naozaj vobec nic.<br><br>A.<br><br><br><br>On Sat, 24 Sep 2011 10:40:07 +0200<br> Pavel Troller <patrol@sinus.cz> wrote:<br>> Zdravím při víkendu,<br>> pomalu dokončuji reverzní inženýring firmware jednoho hezkého <br>>zařízení <br>> a chtěl bych ho po svých autorských změnách přeložti zpětně do <br>>bináru a<br>> spustit. V zařízení je použita klasická 8052.<br>> Problém je, že původní firmware je buďto přeložen z jiného (asi <br>>mírně<br>> vyššího) jazyka jako je C, nebo psán v nějakém makroassembleru s <br>>nevhodně<br>> navrženými makry, takže je vyloženě skličující jej číst a studovat a <br>>je<br>> mi líto chudáka MCU, ten si taky myslí svoje. Zcela reprezentativní <br>>je<br>> například tento kousek:<br>>         MOV        DPTR,#SOMETHING<br>>         MOVX        A,@DPTR<br>>         MOV        DPTR,#SOMETHING<br>>         PUSH        ACC<br>>         CLR        A<br>>         M
OVX        @DPTR,A<br>>         POP        ACC<br>>         MOV        R6,A<br>>         MOV        A,R6<br>>         CJNE        A,#1,nekam<br>>         MOV        A,R6<br>>         CJNE        A,#2,jinam<br>>         MOV        A,R6<br>>         CJNE        A,#3,estejinam<br>>         ...<br>> Zkrátka odhadem třetina (nepřeháním, to číslo zhruba sedí) <br>>instrukcí je<br>> v programu zcela zbytečných.<br>> Program generuje 48k bináru. Zatím nevím, kolik má přesně source <br>>(ještě<br>> jsem jej nevyexportoval z IDA), ale jistě uznáte, že na manuální<br>> optimalizaci je to moc.<br>> V uvedené ukázce bych rád optimalizaci alespoň takovou, aby to <br>>vyhodilo<br>> druhý MOV DPTR a samozřejmě všechny instrukce pracující s R6, které <br>>jsou tam<br>> naprosto zbytečné - do žádného místa programu se zvenčí neskáče a R6 <br>>je<br>> vzápětí využit zase jako dočasný registr pro podobně nesmyslnou <br>>operaci.<br>> Ještě lepší optimalizaci, kdy např. ke přesunu do R6 by došlo ihned <br>>po <br>> prvním MOVX, pak by s
e eliminovaly i PUSH/POP a a CJNE by byly s R6 <br>>místo<br>> s A, už nevyžaduji, ikdyž samozřejmě by byla pěkná.<br>> Existuje nějaký program tohoto schopný ? Vím, že třeba GNU <br>>toolchain <br>> optimalizovat umí, ale nevím zdaleka, nakolik to dělá na úrovni ASM <br>>a nadto<br>> by to asi nezvládl na mnemonice I8051, ale to by se možná dalo <br>>udělat <br>> nějakým předpřekladem do toho jeho "metaassembleru". Nicméně nějaký <br>> specializovanější nástroj by samozřejmě byl lepší.<br>> Zdraví Pavel<br>> _______________________________________________<br>> HW-list mailing list - sponsored by www.HW.cz<br>> Hw-list@list.hw.cz<br>> http://list.hw.cz/mailman/listinfo/hw-list<br></patrol@sinus.cz></body></html>