GNU/Linux >> Znalost Linux >  >> Linux

Prostředí podobné shellu pro binární zpracování?

Tato otázka mi přišla již několikrát, nyní jako odpověď na otázku
Procházet kousky binárních dat ze stdin v Bash
Odpovědi uvedené na https://stackoverflow.com/questions/993434/what -language-is-to-binary-as-perl-is-to-text také nebyly uspokojivé.

Hledám skriptovací prostředí vhodné speciálně pro zpracování I/O s binárními soubory. Vím, že mohu použít jeden z plnohodnotných programovacích jazyků (c/Python/…), ale mají obrovskou režii na inicializaci a kódování (alokace a fread/fwrite v c, bitstring v Pythonu…), nemluvě o tom, že jsou méně vhodné. pro skriptování (volání dalších aplikací z něj). Perl není o nic lepší se svým unpack funkce, řetězcové operace a praštěná syntaxe.

Něco jako od , ale jako jazyk.

Co očekávám:

  1. nastavit nebo změnit endianness jediným přepínačem/příkazem.
  2. jednoduchá specifikace požadovaného typu (něco jako rozšíření bash read var s int32 var , float var atd.).
  3. zpracování binárních kanálů, přeskakování zadaného počtu bajtů.
  4. standardní řízení toku skriptů (for/if/…), na které jsme zvyklí.

Rád bych zpracovával nezpracovaná data (fotografie, vědecká data, neznámé a špatně zdokumentované formáty) se stejnou lehkostí a přehledem, jaké získáte při kontrole souborů ASCII. Používám c nyní, ale není optimální pro ad-hoc skriptování a nemůže být interaktivní.

Zná někdo takový nástroj? Žádný klikavý software GUI, prosím, musí to fungovat přes ssh, z jiných skriptů a tak dále. „Neexistuje“ je přijatelná, ale depresivní odpověď.

Přijatá odpověď:

Mám už léta úplně stejný problém jako ty.

Pro jednoduché neinteraktivní použití rád používám editor binárních bloků BBE.
BBE je binární stejně jako SED pro text, včetně jeho archaické syntaxe a jednoduchosti, nicméně má mnoho funkcí, které mi chybí. často potřebuji, takže jej musím kombinovat s jinými nástroji. BBE je tedy pouze částečné řešení.
Všimněte si také, že BBE již roky nemá žádné aktualizace ani vylepšení.

Samozřejmě lze použít xxd před a xxd -r po úpravě dat pomocí textových nástrojů, ale to nebude fungovat, když jsou dotyčná data velká a je vyžadován náhodný přístup, například při zpracování blokových zařízení.

(Poznámka:Pro Windows existuje alespoň nákladný proprietární skriptovací jazyk WinHex, ale tím se nikam nedostaneme.)

Pro složitější binární úpravy se obvykle také vrátím k Pythonu, i když je někdy příliš pomalý pro velké soubory, což je hlavní nevýhoda. Doufám, že Pyston (Python využívající LLVM ke kompilaci do optimalizovaného strojového kódu) jednou dospěje natolik, aby byl použitelný, nebo ještě lépe, někdo navrhne a implementuje bezplatný kompaktní, rychlý a všestranný skriptovací jazyk pro binární zpracování, pro který AFAIK neexistuje. Systémy podobné U*IX.

Související:Zpracovat potomky?

AKTUALIZACE

Také jsem náhodou používal homebrew, open source Intel x86 assembler plochý assembler nebo zkráceně fasm, který se vyvinul v mnohem víc než jen assembler.

Má výkonný makro preprocesor založený na textových blocích (sám o sobě je to kompletní jazyk Turing) se syntaxí v tradici makrojazyka borland turbo assembler, ale mnohem pokročilejší.

Má také jazyk pro manipulaci s daty, který umožňuje binárně zahrnout libovolné soubory, provádět s nimi všechny druhy binárních a aritmetických manipulací (pouze celé číslo) v „době kompilace“ a zapsat výsledek do výstupního souboru. Tento jazyk pro manipulaci s daty má řídicí struktury a je také kompletní.

Používání je mnohem snazší než psát program, který provádí nějakou binární manipulaci v C a pravděpodobně i v pythonu. Navíc se načítá neuvěřitelně rychle, protože jde o malý spustitelný soubor téměř bez externích závislostí (Existují 2 verze:buď vyžaduje pouze knihovnu libc, nebo může běžet jako statický spustitelný soubor přímo na linuxovém jádře ABI).

Má nějaké okraje límců, jako

  1. nepodporující souběžnost

  2. když píšete v 32bitovém x86 sestavě (funguje však na x86_64), pravděpodobně budete potřebovat qemu nebo podobný emulátor, pokud jej chcete spustit na čemkoli jiném než x86 nebo x86_64

  3. jeho výkonný makropreprocesorový jazyk se dokončuje, to znamená, že máte lepší zkušenosti s jazyky jako Lisp, Haskell, XSLT nebo pravděpodobně M4 by byla nejlepší volba.

  4. všechna data, která mají být zapsána do výstupního souboru, se provádějí v „ploché“ vyrovnávací paměti v paměti a tato vyrovnávací paměť se může zvětšovat, ale ne zmenšovat, dokud není výstupní soubor zapsán a neukončí se fasm. To znamená, že během jediného běhu můžete generovat soubory maximálně tak velké, kolik vám zbývá hlavní paměť.

  5. data lze zapsat pouze do jednoho výstupního souboru pro každý běh fasm

  6. ano, je to domácí, ale opravdu elegantní a chytré


Linux
  1. Linux – trvalá proměnná prostředí pro všechny uživatele?

  2. Pseudo soubory pro dočasná data?

  3. Nástroj pro úpravu dynamické části binárního souboru ELF

  1. Převeďte binární data na hexadecimální ve skriptu shellu

  2. copy_to_user() a copy_from_user() pro základní datový typ

  3. Přepsat cestu k binárnímu souboru pro konkrétního uživatele

  1. MySQL – Převod na data podle tabulky pro InnoDB

  2. RAID pro ty, kteří se mu vyhýbají

  3. Soulad s GDPR pro globální poskytovatele spravovaných služeb