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:
- atur atau ubah endianness dengan satu tombol/perintah.
- spesifikasi sederhana dari tipe yang diminta (seperti memperluas bash
read var
denganint32 var
,float var
dll.). - menangani biner melalui pipa, melewatkan jumlah byte yang ditentukan.
- 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
-
tidak mendukung konkurensi
-
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
-
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.
-
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.
-
data hanya dapat ditulis ke dalam satu file output untuk setiap run of fasm
-
ya, ini buatan sendiri, sangat rapi dan pintar