Yıllardır senden tamamen aynı sorunu yaşıyorum.
Etkileşimli olmayan basit kullanımlar için ikili blok düzenleyici BBE'yi kullanmayı seviyorum . BBE, arkaik sözdizimi ve basitliği de dahil olmak üzere SED'in metne dönüştüğü için ikilidir, ancak sık sık ihtiyacım olan şeylerden eksik birçok özelliği vardır, bu yüzden diğer araçlarla birleştirmem gerekir. Yani, BBE sadece kısmi bir çözümdür. Ayrıca BBE'nin yıllardır herhangi bir güncelleme veya iyileştirme yapmadığını unutmayın.
Tabii ki , verileri metin tabanlı araçlarla düzenlemeden xxd
önce ve xxd -r
sonra kullanabilirsiniz , ancak söz konusu veriler büyük ve rastgele erişim gerektiğinde, örneğin blok cihazları işlerken bu işe yaramaz.
(Not: Windows için, en azından maliyetli, tescilli WinHex komut dosyası dili vardır, ancak bu bizi hiçbir yere götürmez.)
Daha karmaşık ikili düzenleme için, bazen büyük dosyalar için çok yavaş olsa da, genellikle dezavantaj olan Python'a geri dönerim. Umarım Pyston (optimize edilmiş makine kodunu derlemek için LLVM kullanan Python), bir gün kullanılabilir olacak kadar olgunlaşacaktır, ya da daha iyisi, birisi AFAIK için mevcut olmayan ücretsiz, hızlı, çok yönlü bir ikili işleme komut dosyası dili tasarlayacak ve uygulayacaktır. Henüz U * IX benzeri sistemler.
GÜNCELLEME
Ayrıca , sadece bir montajcıdan çok daha fazlası olan ev yapımı, açık kaynaklı Intel x86 montajcı düz montajcı veya kısaca fasm kullanıyorum.
Borland turbo birleştirici makro dili geleneğinde bir sözdizimine sahip güçlü, metin bloğu tabanlı bir makro ön işlemciye (kendisi bir turing tam dili) sahiptir, ancak çok daha ileri düzeydedir.
Ayrıca, ikili dosyaları rasgele dosyaları dahil etmeyi, "derleme zamanında" her türlü ikili ve aritmetik manipülasyonu (yalnızca tamsayı) yapmayı ve sonucu bir çıktı dosyasına yazmayı sağlayan bir veri işleme diline sahiptir. Bu veri manipülasyon dili kontrol desteklerine sahiptir ve ayrıca tamamlanmaktadır.
C ve hatta muhtemelen python'da bazı ikili manipülasyonlar yapan bir program yazmaktan çok daha kolaydır. Ayrıca, neredeyse hiç harici bağımlılığı olmayan küçük boyutlu bir yürütülebilir dosya olduğu için kör edici bir şekilde yüklenir (2 sürüm vardır: ya sadece libc gerektirir veya doğrudan Linux çekirdek ABI'de statik bir yürütülebilir olarak çalışabilir).
Bazı ruff kenarları var,
eşzamanlılığı desteklemiyor
32 bit x86 derlemesinde yazılarak (x86_64 üzerinde çalışıyor), x86 veya x86_64'ten başka bir şeyde çalıştırmak istiyorsanız, muhtemelen qemu veya benzer bir emülatöre ihtiyacınız var.
güçlü makro önişlemci dili tamamlanıyor, bu Lisp, Haskell, XSLT veya muhtemelen M4 gibi dillerde biraz daha iyi bir deneyime sahip olmanız anlamına geliyor.
çıktı dosyasına yazılacak tüm veriler bellekte "düz" bir tamponda gerçekleştirilir ve bu tampon büyüyebilir ancak çıktı dosyası yazılana ve fasm sonlandırılana kadar küçülemez. Bu, bir kişinin yalnızca bir fasm çalıştırmasında ana belleğiniz kadar büyük dosyalar üretebileceği anlamına gelir.
veriler her fasm çalışması için tek bir çıktı dosyasına yazılabilir
evet, homebrew, gerçekten temiz ve zeki bir
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()
mı?