GNU/Linux >> Belajar Linux >  >> Linux

Lingkungan Seperti Shell Untuk Pemrosesan Biner?

Pertanyaan ini datang kepada saya beberapa kali sebelumnya, sekarang sebagai tanggapan atas pertanyaan
Loop melalui potongan data biner dari stdin di Bash
Jawaban diberikan di https://stackoverflow.com/questions/993434/what -language-is-to-binary-as-perl-is-to-text juga tidak memuaskan.

Saya mencari lingkungan skrip yang cocok secara khusus untuk menangani I/O dengan file biner. Saya tahu saya dapat menggunakan salah satu bahasa pemrograman yang lengkap (c/Python/…) tetapi mereka memiliki inisialisasi dan pengkodean yang sangat besar (alokasi dan fread/fwrite dalam c, bitstring dengan Python…) belum lagi mereka kurang cocok untuk scripting (memanggil aplikasi lain dari itu). Perl tidak lebih baik dengan unpack fungsi, operasi berorientasi string, dan sintaksis konyol.

Sesuatu seperti od , tetapi sebagai bahasa.

Apa yang saya harapkan:

  1. atur atau ubah endianness dengan satu tombol/perintah.
  2. spesifikasi sederhana dari tipe yang diminta (seperti memperluas bash read var dengan int32 var , float var dll.).
  3. menangani biner melalui pipa, melewatkan jumlah byte yang ditentukan.
  4. kontrol aliran skrip standar (untuk/jika/…) yang biasa kami gunakan.

Saya ingin memproses data mentah (fotografi, data ilmiah, format yang tidak diketahui dan didokumentasikan dengan buruk) dengan kemudahan dan wawasan yang sama seperti yang Anda dapatkan saat memeriksa file ASCII. Saya menggunakan c sekarang, tetapi tidak optimal untuk skrip ad-hoc, dan tidak dapat interaktif.

Adakah yang tahu alat seperti itu? Tidak ada perangkat lunak GUI clicky, tolong, itu perlu bekerja melalui ssh, dari skrip lain dan sebagainya. “Tidak ada” adalah jawaban yang dapat diterima, tetapi menyedihkan.

Jawaban yang Diterima:

Saya juga memiliki masalah yang sama persis dengan Anda selama bertahun-tahun.

Untuk penggunaan non-interaktif sederhana, saya suka menggunakan editor blok biner BBE.
BBE adalah biner seperti SED untuk teks, termasuk sintaks kuno dan kesederhanaan, namun, ia memiliki banyak fitur yang hilang dari apa yang saya sering membutuhkan, jadi saya harus menggabungkannya dengan alat lain. Jadi, BBE hanyalah solusi parsial.
Perhatikan juga bahwa BBE tidak memiliki pembaruan atau peningkatan selama bertahun-tahun.

Tentu saja seseorang dapat menggunakan xxd sebelum dan xxd -r setelah mengedit data dengan alat berbasis teks, tetapi itu tidak akan berfungsi ketika data yang dipermasalahkan besar dan akses acak diperlukan, misalnya saat memproses perangkat blok.

(Catatan:Untuk Windows, setidaknya ada bahasa skrip WinHex berpemilik yang mahal, tapi itu tidak akan membawa kita kemana-mana.)

Untuk pengeditan biner yang lebih rumit, saya biasanya kembali ke Python juga, meskipun terkadang terlalu lambat untuk file besar, yang merupakan kelemahan utamanya. Saya berharap Pyston (Python yang menggunakan LLVM untuk dikompilasi ke kode mesin yang dioptimalkan) suatu hari nanti akan cukup matang untuk dapat digunakan, atau bahkan lebih baik, seseorang akan merancang dan mengimplementasikan bahasa skrip pemrosesan biner yang ringkas, cepat, dan serbaguna, yang AFAIK tidak ada untuknya U*IX belum menyukai sistem.

Terkait:Proses keturunan?

PERBARUI

Saya juga kebetulan menggunakan assembler flat assembler Intel x86 homebrew, open source, atau singkatnya fasm, yang berkembang menjadi lebih dari sekadar assembler.

Ini memiliki praprosesor makro berbasis blok teks yang kuat (itu sendiri merupakan bahasa lengkap turing) dengan sintaks dalam tradisi bahasa makro perakit borland turbo, tetapi jauh lebih maju.

Juga, ia memiliki bahasa manipulasi data, yang memungkinkan biner menyertakan file arbitrer, melakukan semua jenis manipulasi biner dan aritmatika di atasnya (hanya bilangan bulat) pada "waktu kompilasi" dan menulis hasilnya ke dalam file output. Bahasa manipulasi data ini memiliki struktur kontrol dan juga turing yang lengkap.

Jauh lebih mudah digunakan daripada menulis program yang melakukan manipulasi biner dalam C dan bahkan mungkin dengan python. Plus, ini memuat sangat cepat, karena ini adalah executable berukuran kecil dengan hampir tidak ada ketergantungan eksternal (Ada 2 versi:hanya membutuhkan libc atau dapat dijalankan sebagai executable statis langsung di kernel Linux ABI).

Itu memang memiliki beberapa tepi kasar, seperti

  1. tidak mendukung konkurensi

  2. sedang ditulis dalam perakitan x86 32 bit (berfungsi pada x86_64), Anda mungkin memerlukan qemu atau emulator serupa jika Anda ingin menjalankannya selain x86 atau x86_64

  3. bahasa praprosesor makro yang kuat sedang tur lengkap, ini berarti Anda lebih baik memiliki pengalaman dengan bahasa seperti Lisp, Haskell, XSLT, atau mungkin M4 akan menjadi pilihan terbaik.

  4. semua data yang akan ditulis ke dalam file output dilakukan dalam buffer "flat" di memori, dan buffer ini dapat bertambah tetapi tidak menyusut sampai file output telah ditulis dan fasm dihentikan. Ini berarti bahwa seseorang hanya dapat menghasilkan file paling banyak sebesar Anda memiliki memori utama yang tersisa dalam satu fasm.

  5. data hanya dapat ditulis ke dalam satu file output untuk setiap run of fasm

  6. ya, ini buatan sendiri, sangat rapi dan pintar


Linux
  1. RAID bagi mereka yang menghindarinya

  2. Linux – Variabel Lingkungan Permanen Untuk Semua Pengguna?

  3. File Pseudo Untuk Data Sementara?

  1. MySQL – Mengonversi ke Data Per Tabel untuk InnoDB

  2. Kepatuhan GDPR untuk Penyedia Layanan Terkelola Global

  3. Memeriksa variabel lingkungan

  1. Alat untuk memodifikasi bagian dinamis dari biner ELF

  2. Mengonversi data biner menjadi heksadesimal dalam skrip Shell

  3. copy_to_user() dan copy_from_user() untuk tipe data dasar