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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 7
dnes 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 0
včera 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 5
včera 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 41
včera 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 9
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 25
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 18
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 6
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 775 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

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

MaSo avatar 4.1. 20:33 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
"Univerzální" (dis)assembler
Přečteno: 922×
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. 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. 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. 21:19 pc2005 | skóre: 31 | 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. 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. 07:40 pc2005 | skóre: 31 | 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. 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. 10:36 pc2005 | skóre: 31 | 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. 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. 09:34 pc2005 | skóre: 31 | 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. 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. 22:34 pc2005 | skóre: 31 | 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. 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. 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. 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. 10:30 pc2005 | skóre: 31 | 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. 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í.
8.1. 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. 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. 09:40 pc2005 | skóre: 31 | 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. 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. 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. 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. 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.