Od lat mam dokładnie ten sam problem, co ty.
Do prostych nieinteraktywnych zastosowań lubię używać edytora bloków binarnych BBE . BBE ma postać binarną, podobnie jak SED do tekstu, w tym archaiczną składnię i prostotę, jednak brakuje w niej wielu funkcji, których często potrzebuję, więc muszę połączyć to z innymi narzędziami. Tak więc BBE jest tylko częściowym rozwiązaniem. Należy również pamiętać, że BBE od lat nie ma żadnych aktualizacji ani ulepszeń.
Oczywiście można używać xxd
przed i xxd -r
po edycji danych za pomocą narzędzi tekstowych, ale to nie zadziała, gdy dane są duże i wymagany jest losowy dostęp, na przykład podczas przetwarzania urządzeń blokowych.
(Uwaga: w przypadku systemu Windows istnieje co najmniej kosztowny, zastrzeżony język skryptowy WinHex, ale nigdzie nas to nie doprowadzi.)
W przypadku bardziej skomplikowanej edycji binarnej zwykle wracam również do Pythona, chociaż czasami jest on zbyt wolny dla dużych plików, co jest jego główną wadą. Mam nadzieję, że Pyston (Python wykorzystujący LLVM do skompilowania do zoptymalizowanego kodu maszynowego) kiedyś dojrzeje na tyle, aby był użyteczny, a nawet lepiej, ktoś zaprojektuje i wdroży bezpłatny, kompaktowy, szybki i wszechstronny język skryptowy do przetwarzania binarnego, dla którego AFAIK nie istnieje Systemy podobne do U * IX.
AKTUALIZACJA
Zdarza mi się również używać płaskiego asemblera homebrew, open source Intel x86 asembler , lub w skrócie fasm, który ewoluował w coś więcej niż tylko asembler.
Ma potężny, oparty na blokach tekstowych preprocesor makr (sam w sobie pełny język turinga) o składni w tradycji makroregionu Borland Turbo asemblera, ale o wiele bardziej zaawansowany.
Ma także język manipulacji danymi, który pozwala na binarne dołączanie dowolnych plików, wykonywanie na nim wszelkiego rodzaju manipulacji binarnych i arytmetycznych (tylko liczba całkowita) w „czasie kompilacji” i zapisywanie wyniku w pliku wyjściowym. Ten język manipulacji danymi ma struktury kontrolne, a także jest kompletny.
Jest o wiele łatwiejszy w użyciu niż pisanie programu, który wykonuje binarne manipulacje w C, a prawdopodobnie nawet w Pythonie. Ponadto ładuje się on oślepiająco szybko, ponieważ jest to plik wykonywalny o niewielkich rozmiarach prawie bez zewnętrznych zależności (istnieją 2 wersje: albo wymaga tylko libc, albo może działać jako statyczny plik wykonywalny bezpośrednio na jądrze Linux ABI).
Ma pewne krawędzie, takie jak
nie obsługuje współbieżności
pisząc w 32-bitowym zestawie x86 (działa jednak na x86_64), prawdopodobnie potrzebujesz qemu lub podobnego emulatora, jeśli chcesz uruchomić go na czymkolwiek innym niż x86 lub x86_64
jego potężny język preprocesora makr jest w pełni ukończony, co oznacza, że lepiej mieć trochę doświadczenia z takimi językami jak Lisp, Haskell, XSLT lub prawdopodobnie M4 byłby najlepszym wyborem.
wszystkie dane, które mają zostać zapisane w pliku wyjściowym, są wykonywane w „płaskim” buforze w pamięci, a bufor ten może się powiększać, ale nie kurczyć się, dopóki plik wyjściowy nie zostanie zapisany i nie zostanie zakończony FASM. Oznacza to, że można wygenerować tylko najwyżej pliki tak duże, jak w pamięci głównej pozostała pamięć główna.
dane można zapisać tylko w jednym pliku wyjściowym dla każdego uruchomienia Fasm
tak, to homebrew, ale naprawdę schludny i sprytny
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()
czy już na to spojrzałeś?