Pertanyaan ini datang kepada saya beberapa kali sebelumnya, sekarang sebagai jawaban atas pertanyaan Loop melalui potongan data biner dari stdin di Bash Answers yang diberikan di /programming/993434/what-language-is-to-binary -as-perl-is-to-text juga tidak memuaskan.
Saya mencari lingkungan skrip yang cocok 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 overhead yang sangat besar (alokasi dan ketakutan / fwrite dalam c, bitstring dalam Python ...) belum lagi mereka kurang cocok untuk skrip (memanggil aplikasi lain dari itu). Perl tidak lebih baik dengan unpack
fungsinya, operasi berorientasi string dan sintaks yang konyol.
Sesuatu seperti od
, tetapi sebagai bahasa.
Apa yang saya harapkan:
- atur atau ubah endianness dengan satu sakelar / perintah.
- spesifikasi sederhana dari tipe yang diminta (sesuatu seperti memperpanjang bash
read var
withint32 var
,float var
dll.) - penanganan biner melalui pipa, melewatkan jumlah byte yang ditentukan.
- kontrol aliran skrip standar (untuk / jika / ...) yang biasa kita gunakan.
Saya ingin memproses data mentah (fotografi, data ilmiah, format yang tidak diketahui dan kurang didokumentasikan) dengan kemudahan dan wawasan yang sama dengan yang Anda dapatkan ketika memeriksa file ASCII. Saya menggunakan c
sekarang, tetapi itu tidak optimal untuk skrip ad-hoc, dan tidak bisa interaktif.
Adakah yang tahu alat seperti itu? Tolong, jangan ada perangkat lunak GUI yang klik, perlu bekerja lebih dari ssh, dari skrip lain dan sebagainya. "Tidak ada" adalah jawaban yang dapat diterima, tetapi menyedihkan.
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()
Sudahkah Anda melihat itu?perl
'sunpack
(ᵔᴥᵔ)Jawaban:
Saya memiliki masalah yang sama persis dengan Anda selama bertahun-tahun juga.
Untuk penggunaan non-interaktif sederhana, saya suka menggunakan editor blok biner BBE . BBE adalah untuk biner karena SED adalah untuk teks, termasuk sintaksis kuno dan kesederhanaannya, namun, ia memiliki banyak fitur yang hilang dari apa yang sering saya butuhkan, 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 orang dapat menggunakan
xxd
sebelum danxxd -r
sesudah mengedit data dengan alat berbasis teks, tetapi itu tidak akan berfungsi ketika data yang dimaksud besar dan akses acak diperlukan, misalnya saat memproses perangkat blok.(Catatan: Untuk Windows, setidaknya ada bahasa scripting WinHex yang mahal dan eksklusif, tetapi itu tidak akan membawa kita ke mana pun.)
Untuk mengedit biner yang lebih rumit, saya biasanya kembali ke Python, meskipun terkadang terlalu lambat untuk file besar, yang merupakan kelemahan utama. Saya harap Pyston (Python menggunakan LLVM untuk mengkompilasi ke kode mesin yang dioptimalkan) suatu hari nanti 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 untuk U * IX belum menyukai sistem.
MEMPERBARUI
Saya juga kebetulan menggunakan homebrew, open source assembler flat assembler Intel x86 , atau singkatnya, yang berkembang menjadi lebih dari sekadar assembler.
Ini memiliki, preprocessor makro berbasis blok teks yang kuat (itu sendiri merupakan bahasa lengkap turing) dengan sintaksis dalam tradisi bahasa makro assembler borland turbo assembler, tetapi jauh lebih maju.
Juga, ia memiliki bahasa manipulasi data, yang memungkinkan untuk biner memasukkan file sewenang-wenang, melakukan semua jenis manipulasi biner dan aritmatika di atasnya (hanya bilangan bulat) pada "waktu kompilasi" dan menulis hasilnya menjadi file output. Bahasa manipulasi data ini memiliki strutures kontrol dan juga turing lengkap.
Ini jauh lebih mudah digunakan daripada menulis program yang melakukan manipulasi biner dalam C dan mungkin bahkan dengan python. Plus, ini memuat sangat cepat, karena ini adalah executable berukuran kecil dengan hampir tidak ada ketergantungan eksternal (Ada 2 versi: baik itu hanya memerlukan libc atau dapat dijalankan sebagai statis yang dapat dieksekusi langsung pada kernel Linux ABI).
Itu memang memiliki beberapa tepi ruff, seperti
tidak mendukung konkurensi
sedang menulis dalam rakitan x86 32 bit (berfungsi pada x86_64), Anda mungkin perlu qemu atau emulator serupa jika Anda ingin menjalankannya di apa pun selain x86 atau x86_64
itu bahasa preprocessor makro yang kuat adalah turing lengkap, ini berarti Anda lebih baik memiliki beberapa pengalaman dengan bahasa seperti Lisp, Haskell, XSLT, atau mungkin M4 akan menjadi pilihan terbaik.
semua data yang akan ditulis ke file output dilakukan dalam buffer "flat" dalam memori, dan buffer ini dapat tumbuh tetapi tidak menyusut sampai file output telah ditulis dan fasm diakhiri. Ini berarti bahwa seseorang hanya dapat menghasilkan file paling besar seperti Anda memiliki memori utama yang tersisa dalam satu menjalankan fasme.
data hanya dapat ditulis ke dalam file output tunggal untuk setiap menjalankan fasme
ya, itu adalah homebrew, yang benar-benar rapi dan pintar
sumber
Anda tidak harus "berdamai" dengan Perl yang belum dibuka ... salah satu hal hebat tentang perl adalah bagaimana Anda dapat menyalahgunakan parser dan tabel simbol untuk membuat bahasa Anda sendiri, dalam paket khusus.
Apakah ini yang pada dasarnya Anda cari?
Latihan selanjutnya adalah mempelajari perl yang cukup untuk menulis paket MyBinLib. Tanyakan di forum Perl dan orang-orang mungkin akan dengan senang hati membantu.
sumber
Apakah Anda menemukan
beav
makros, tetapi saya tidak dapat menemukan skrip,apt-cache show beav
ekstrak:Lalu ada
xxd
yang mengkonversi ke / dari mode tampilan biner / ascii dan dapat dikombinasikan bersama dengansed
atauvi
, tetapi belum mendapatkan fitur byte swapping.sumber
Anda selalu bisa mendapatkan emas dan jatuh ke C atau ASM. Jika Anda bekerja dengan biner mentah, cukup bouncing langsung dari register. Anda sudah ada di sana.
sumber