abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 23:45 | Zajímavý software

Na blogu Qt bylo představeno Qt 3D Studio. Jedná se o produkt dosud známý pod názvem NVIDIA DRIVE™ Design Studio. NVIDIA jej věnovala Qt. Jedná se o několik set tisíc řádků zdrojového kódu. Qt 3D Studio bude stejně jako Qt k dispozici jak pod open source, tak pod komerční licencí. Ukázka práce s Qt 3D Studiem na YouTube.

Ladislav Hagara | Komentářů: 1
včera 17:50 | Komunita

Nadace The Document Foundation (TDF) zastřešující vývoj svobodného kancelářského balíku LibreOffice slaví 5 let od svého oficiálního vzniku. Nadace byla představena 28. září 2010. Formálně byla založena ale až 17. února 2012.

Ladislav Hagara | Komentářů: 0
včera 12:50 | Komunita

Mozilla.cz informuje, že dosud experimentální funkce Page Shot z programu Firefox Test Pilot (zprávička) se stane součástí Firefoxu. Page Shot je nástroj pro vytváření snímků webových stránek. Umí výběr oblasti, prvku stránky (např. odstavce), nebo uložení snímku celé stránky. Snímky lze ukládat na disk nebo nahrávat na server Mozilly. Nedávno bylo oznámeno, že se součástí Firefoxu stane Activity Stream.

Ladislav Hagara | Komentářů: 21
včera 04:10 | Nová verze

Po 10 týdnech vývoje od vydání Linuxu 4.9 (zprávička) oznámil Linus Torvalds, mj. již 20 let žijící v USA, vydání Linuxu 4.10 (LKML). Přehled nových vlastností a vylepšení například na Kernel Newbies a v Jaderných novinách (1, 2 a 3). Kódové jméno Linuxu 4.10 je Fearless Coyote.

Ladislav Hagara | Komentářů: 6
19.2. 15:55 | Zajímavý projekt

Vyzkoušet si příkazy a vyřešit několik úkolů lze na stránkách Commandline Challenge (CMD Challenge). Úkoly lze řešit různými způsoby, důležitý je výsledek. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

Ladislav Hagara | Komentářů: 18
18.2. 17:35 | Bezpečnostní upozornění

Německá Bundesnetzagentur (obdoba českého ČTU) zakázala na německém území prodej panenky Cayla kvůli „špionáži“ dětí. Tato elektronická hračka obsahuje mikrofon, reproduktor a kameru a bezdrátové komunikační rozhraní, pomocí kterého se hračka připojuje na servery výrobce. Takovýmto způsobem může hračka pomocí umělé inteligence „odpovídat“ na dotazy dítěte. Hlavní problém bude ale asi někde jinde, podle prvotních zpráv může

… více »
Petr Tomášek | Komentářů: 32
17.2. 15:30 | Bezpečnostní upozornění

CSIRT.CZ upozorňuje, že bezpečnostní experti objevili nový typ malwaru, jenž cílí na open source e-commerce platformu Magento. Malware je zajímavý tím, že se jedná o první svého druhu, jehož kód zůstává skrytý v SQL databázi zasaženého e-shopu. Škodlivý kód je volán pomocí tzv. SQL trigerru, který je spouštěn při každém vytvoření objednávky v systému.

Ladislav Hagara | Komentářů: 3
17.2. 09:00 | Nová verze

Bylo vydáno Ubuntu 16.04.2 LTS, tj. druhé opravné vydání Ubuntu 16.04 LTS s kódovým názvem Xenial Xerus. Přehled novinek v poznámkách k vydání a v přehledu změn.

Ladislav Hagara | Komentářů: 59
17.2. 06:00 | Zajímavý článek

Pavel Tišnovský se v dvoudílném článku na MojeFedora.cz věnuje tvorbě pluginů (modulů) pro bitmapový grafický editor GIMP. Pomocí pluginů lze GIMP rozšiřovat o další funkce. Implementovat lze například nové filtry nebo pomocné utility pro tvorbu animací či poloautomatickou retuš snímků.

Ladislav Hagara | Komentářů: 6
16.2. 23:32 | Komunita

Do 30. března se lze přihlásit do dalšího kola programu Outreachy, jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 30. května do 30. srpna 2017, v participujících organizacích lze vydělat 5 500 USD. Jedná se již o 14. kolo tohoto programu.

Ladislav Hagara | Komentářů: 11
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (13%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 671 hlasů
 Komentářů: 54, poslední dnes 07:38
Rozcestník
Reklama

Dotaz: "Univerzální" (dis)assembler

MaSo avatar 4.1.2016 20:33 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
"Univerzální" (dis)assembler
Přečteno: 928×
Zdravím, zkouším si navrhnout vlastní CPU do CPLD/FPGA. Mám tím pádem i vlastní instrukční sadu s vlastními opkódy.
Můj dotaz je tímto jednoduchý:
existuje nějaký "univerzální" (dis)assembler, který bych naučil moje instrukce+opkódy?
Zkouším si psát vlastní (hehe, v BASHi :-D ), ale je to peklo; parsovat řádky a v nich třeba i matematické operace, kde se až výsledek "připojí" k dané instrukci, atd. Třeba separovat mezery, uvozovky, apostrofy jako vstup pro instrukci, ...
CPU bude sloužit jako řídící prvek pro konkrétní aplikace, které vyžadují interakci s nadřazeným systémem. Momentálně se řídím PICkama, ALE něco zjednodušuji a něco vylepšuji - více registrů, mnohonásobně rychlejší zpracování instrukcí (zatím se mi vše daří vecpat do 2 fází hodin, tzn. využití rise i fall hodin) a to včetně zpracování přerušení - uložení/výběr adresy.
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )

Odpovědi

4.1.2016 21:59 pako
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Jestli existuje "universální" assembler nevím, ale parsovat cokoliv v bashi zní jako docela krkolomná akce. Určitě snáze by to šlo s Pythonem (pro sh-like syntaxi obsahuje modul shlex, už jen to by Vám vyřešilo zábavu s mezerami a řetězci v uvozovkách) nebo Perlem. Obecněji se asi budete chtít podívat na nástroje lexikální analýzy (jako flex/bison).
5.1.2016 01:00 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Nic univerzálního neexistuje.

Prostě příkazy znáš tak si napiš vlastní překladač který poběží na jiné platformě a tam pak napíšeš překladač který už poběží na tvém CPU a pak už budeš soběstačný.
5.1.2016 21:19 pc2005 | skóre: 32 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Hustý, 8 bit? Jak moc RISC? Já před pár lety zkoušel psát emulátor instrukcí pro x86 a to v perlu. Ty regexpy se daly krásně použít na parsování řetězců 010101 :-D. Mám dojem, že jsem přepsal všechny instrukce z pentia datasheetu, ale pak už jsem se na emulaci ve virtuálních registrech vykašlal :-/.

Pokud chceš psát něco vlastního, tak si radši než BASH napiš parsovací funkce v C (i tam můžeš použít bitfieldy v packed struct). Ale pokud je to nějaká normální architektura a plánuješ ji rozvinout, tak si můžeš patchnout binutils a pak můžeš pracovat s objektovýma souborama. Jenom možná binutils bude asi mít problémy parsovat 8/16bit binárky.

Horší by byl překladač.

P.S. Napiš o tom hackování blog ;-).
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
MaSo avatar 6.1.2016 20:03 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Jedná se o 8b data, registry, ... adresování až 13b (velikost instrukce je fixních 16b) (interní ROM) - původně bylo zamýšleno čtení programu z ext. SPI Flashky, k čemuž se možná vrátím (v simulátoru (Logisim, kde navrhuji i toto µCPU) mám hotovou "čtečku" EEPROMky 93C46 v 8b režimu). 64b (zatím - podpora až 256B) interní RAM pro data. Pro jednoduché aplikace - takové "SoC" by to mělo stačit - vše bude v jednom CPLD/FPGA čipu. Pokud se to nevleze do CPLD, tak to půjde do FPGA, kde už by to teoreticky díky internímu PLL mohlo šlapat až někde na 300-600MHz = 300-600MIPS.
Momentálně se dá říct, že se jedná převážně o RISC (1 takt hodin, malá sada instrukcí, která se bude asi rozšiřovat - zatím je jen pár instrukci - chci doladit Assembler pro lepší testování s možnosti exportu přímo pro Logisim). Instrukci bude nejspíše přibývat, tak snad z toho nakonec nebude CISC... :-D
Co se týče assembleru, tak nejvíce si rozumím s BASHem i když jsem našel na netu very-light parser assemleru v Pythonu (který vůbec neumím) a tak nějak jsem jej poladil pro mé účely - učím se s tím docela rychle. Netušil jsem, jak je Python rychlý na to, že je to jen "skriptovací" jazyk. A s tím C, nevím, no. Už jsem jej kdysi zkoušel (řízení krokáče přes paralelní port), toť vše :-D Co se mi tak zdá, tak Python má docela blízko k C, tak uvidím, co dál... Každopádně chci vykutit nějaký základní (dis)assembler, pak budu pokračovat v HW CPU.
No blog, já zas nejsem na nějaké to rozepisování :-)

Už jsem tak před rokem navrhoval komplexnější CPU (CISC), ale myslím, že jsem taky skončil u assembleru (který i docela fungoval), čímž to zhaslo :-/ )
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
7.1.2016 07:40 pc2005 | skóre: 32 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Aha takže něco na úrovni PICu nebo picoblaze. S tím by asi měly binutils problém. Ale zase pro tak malý opcode prostor není problém napsat vlastní parser. A důležité je použít něco co umí pracovat s bitovými poli. V bashi je to dost o ústa :-D.

Python určitě nemá blízko k C :-D, ale pokud na to máš už nějakej template tak proč ne. Já jsem původně zavrhl bison a flex parsování (makrojazyk, který se přeloží do C, trochu těžkopádná syntaxe a vykopírování třeba řetězců lehko vede k segfaultu při chyb programátora), ale nakonec jsem se k nim rád vrátil (od perlu).

Blog klidně jen ukázky architektury :-D.
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
MaSo avatar 7.1.2016 19:38 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Bitovém pole myslíš v parseru? (Tam nevidím problém, v minulém "projektu" CPU jsem to měl) Nebo myslíš instrukce v CPU pro bitové operace? také není problém, ale zatím je nemám.
Hmm, dle mně se Python a C podobá, ale to je jedno, hlavně, abych to dotáhl do konce, ať už použiji cokoli... :-D
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
8.1.2016 10:36 pc2005 | skóre: 32 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Myslím bitové pole v C struct definici. Například (náhodně vybrané z PIC32 kompilátoru):
typedef union {
  struct {
    unsigned TBF:1;
    unsigned RBF:1;
    unsigned R_W:1;
    unsigned S:1;
    unsigned P:1;
    unsigned D_A:1;
    unsigned I2COV:1;
    unsigned IWCOL:1;
    unsigned ADD10:1;
    unsigned GCSTAT:1;
    unsigned BCL:1;
    unsigned :3;    //reserved
    unsigned TRSTAT:1;
    unsigned ACKSTAT:1;
  };
} __I2C2ASTATbits_t;
Tohle vlastně definuje přímo bity v nějakém 16 bit registru. Když pak uložíš nebo načteš nějakou proměnnou třeba z binárního souboru, tak máš hned rovnou přístup k jednotlivým hodnotám.
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
MaSo avatar 8.1.2016 23:46 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
aha :-)
Tak tak dalece k definicím jsem se zatím nedostal. A ono zatím nemám ani co definovat, ještě nejsou žádné "HW" registry. I když...
... mám už tam několik typů přerušení ("akce": enable, flag a clear).
Programování bude čistě v asm., C implementovat nebudu - to je mimo mé schopnosti.
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
9.1.2016 09:34 pc2005 | skóre: 32 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Tak hodně štěstí :-D. BTW Jaký FPGA vlastně?
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
MaSo avatar 9.1.2016 17:29 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Dík no.... :-D
Soustředil jsem se na Xilinx, nějaké hrátky byly zatím jen s nejnižším CPLD XC9536, doma mám pak XC95288 (nebo jak to je) a pak jestli se nepletu, tak nějakého Spartana-3 a Spartana-6 XC6SLX9 (11400 klopáků). Programátor mám Presto (podpora EEpromů/Flash, různé µ-controléry, podpora JTAG) od Asixu (česká firma) s podporu SW pro Linux (sic "jen" přes wine, ale funguje bez chyb). Psal jsem o něj blog tady na ábíčku.
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
9.1.2016 22:34 pc2005 | skóre: 32 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Do XC9536 se to téměř určitě nevejde (tam je jen 36 registrů). Pokud chceš nějakou pamět programu, tak ideálně blockRAM v jednom z těch spartanu.
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
MaSo avatar 10.1.2016 18:47 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
jj, tohle vím, použiji toho spartana... a RAMku mám navrhlou svou...
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
6.1.2016 23:51 Tomáš
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler

Psát parser pro gramatiku ( ač jednoduchou ) není nic triviálního. Zvláště ne v bash. Podíval bych se na generátory parserů. Konkrétně na ANTLR. Tady je příklad assembleru. Má to 630 řádek z nich 1/4 jsou prázdné řádky.

Další variantou jsou pak lex/flex a yacc/bison.

Myslím, že na ten disassembler by šly tyto nástroje použít.

MaSo avatar 7.1.2016 20:37 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
joj, tak to ANTLR vypadá, že je odpověď na můj dotaz. Sic nechápu, proč je tak složitě definované case insensitive instrukcí, ale i tak. Dále, co jsem se díval na příklad, tak zápis typu:
blabla
  : x y
  ;
jestli nepůjde zjednodušit stylem:
blala: x y ;
Jak budu mít trošku času, tak na to mrknu, zatím moc díky.
Jen ještě nevím, co z toho vyleze, jestli JEN ověřuje syntaxi a až pak si musím ??sám?? vytvořit převod na strojový kód (hex/bin)nebo je tam další definice k hlubší analýze a převodu.
Určitě se budu muset podívat na nějaký ten (RT)FM :-D
Zatím moc díky!
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
8.1.2016 10:30 pc2005 | skóre: 32 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Parsery fungujou tak, že si vytvoříš předpis jazyka například:
whitespace + identifikátor + whitespace + číslo/jmémo proměnné + whitespace
A v sekci, která tomuhle předpisu bude odpovídat získáš nějakou funkcí toho parseru to číslo nebo jméno proměnné a to použiješ pro vygenerování opkódu nebo nějaké akce (třeba EXIT u skriptu, v případě assembleru třeba vygenerování adresy návěští).

U makrojazyka bison/yacc můžeš zapsat víc na řádek, oddělují se tuším znakem pajpou. Vtip je v tom, že za každej match můžeš hodit kus svého kódu. Ale řekl bych, že to bude nějak i u toho ANTLR. On je ten formát zápisu gramatiky dost jazykově nezávislý.

Já používal jako úplně první seznámení seriál tady na abclinuxu "Jazyky a překladače".

V případě převodu bin → asm se ale IMO parser nevyplatí.
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
Jendа avatar 8.1.2016 10:44 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
jestli nepůjde zjednodušit stylem
No minimálně v Bisonu to zdá se projde. Jinak já to píšu stylem tak mezi:
foo:   bar
     | baz
     ;
Ještě jsem za to vynadáno nedostal.
Jen ještě nevím, co z toho vyleze, jestli JEN ověřuje syntaxi a až pak si musím ??sám?? vytvořit převod na strojový kód (hex/bin)nebo je tam další definice k hlubší analýze a převodu.
Opět něco mezi :-). Nejen, že to ověří syntaxi, ale v okamžiku, kdy ti to žere kus vstupu, si tam můžeš přidat kus vlastního kódu - typicky to, co právě vygeneruje stroják. Např. (zjednodušeně)
term_loop:  term_loop DUTOK_PLUS term {
              $$.přidej_kód(nacpi $1 na stack);
              $$.přidej_kód(nacpi $2 na stack);
              $$.přidej_instrukci(ADD);
            }
            ;
Vysoce užitečný byl předmět PP, bohužel k tomu nejsou použitelná skripta. Přemýšlel jsem, že něco napíšu, ale a) jsem lama, mé znalosti jsou na úrovni toho jednosemestrálního kurzu, b) efektivně by to znamenalo udělat step-by-step návod na řešení těch úkolů, které se každý rok recyklují.
Vox agroferti, vox Dei.
8.1.2016 11:32 tom
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Na prototypovani je asi nejrychlejsi perl. Podival bych se na implementaci

http://search.cpan.org/~pscust/CPU-Z80-Assembler-2.15/lib/CPU/Z80/Assembler.pm

a vzal si z toho pouzitelne knihovny, treba

http://search.cpan.org/~pscust/Asm-Preproc-1.02/lib/Asm/Preproc.pm
8.1.2016 17:12 Zopper | skóre: 14
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Jednoznačně se připojuji k "použít lex+yacc/bison". Konkrétně nadhodím PLY: http://www.dabeaz.com/ply/ což je python implementace lex+yacc, nedávno jsem to použil. V odkazech se dá najít i implementace překladače pro jazyk C.

Tohle je samozřejmě situace, kdy formální vzdělání hodně věcí zjednoduší. Vědět, co je, jak vypadá a jaké má omezení bezkontextová gramatika (a jak ji vytvořit)... Protože aspoň v nějaké intuitivní a zjednodušené formě to stejně budeš muset pochopit, abys mohl vysvětlit těm nástrojům, jak tvůj jazyk vypadá. ;-)
"Dlouho ještě chcete soudit proti právu, stranit svévolníkům?" Ž 82,2
9.1.2016 09:40 pc2005 | skóre: 32 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Ja ještě přihodím odkazy na manuál a učebnici, co jsem použil pro úspěšně "fungující" gramatiku :-D.

Jinak se hodí znalost regexpů.
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
MaSo avatar 9.1.2016 17:34 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Díky moc! Mrknu na to :-)
S regexpy nějaký problém nemám (sice často musím použit strejčka... :-D )
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
12.1.2016 15:31 Marek Sulik
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
No ak ti stačia regulárna gramatika, tak potom odporúčam RAGEL.

http://www.colm.net/open-source/ragel/

12.1.2016 18:37 Marek Sulik
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Ak chceš, tak mǒžem pomǒct s tým disassemblerom. Zadarmo.

MaSo avatar 15.1.2016 17:12 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: "Univerzální" (dis)assembler
Děkuji :-)
disassembler je relativně jednoduchý i v rámci BASHe, horší je to právě s assemblerem: gramatika, proměnně včetně doplňkových výpočtů, např.:
napr: = (b'00110100'+0x17)/2
offset equ (11+0x20)*2-napr
 movlr 'A'+offset,r3  (nebo: movr #'a'+h'1e',r4 - křížek se používal u Motoroly, ke které mám dost blízko)
výpočty udělat skrze např. 'bc' (což už mi částečně funguje, až na doplňování proměnných), tady je boj.
Pokud se mi nepodaří nějak obstojně ovládnout nějaký "tool", tak to nakonec udělám v BASHi, což potrvá :-) Anebo python, kde jsem našel jeden příklad - premiéra s Pythonem :-)
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.