Tôi không biết liệu phiên bản của sed
bạn sẽ sạch nhị phân hay sẽ làm nghẹt thở những gì nó nghĩ là dòng thực sự dài trong đầu vào của nó, nhưng việc chặn các vấn đề đó, chỉnh sửa chuỗi tại chỗ sẽ hoạt động. Để xem liệu nó có, so sánh các phiên bản cũ và mới cmp -l
. Nó sẽ cho bạn biết liệu ba điểm khác biệt duy nhất giữa hai tệp có phải là 3 byte hay không.
Chỉnh sửa các chuỗi trong một tệp thực thi được biên dịch thực sự sẽ hoạt động nếu các chuỗi có cùng độ dài, nhưng hầu như nó cũng sẽ luôn hoạt động nếu bạn rút ngắn chuỗi, do cách các chuỗi hoạt động trong C. Trong chuỗi C, mọi thứ sau bộ NUL
kết thúc không được tính, vì vậy nếu bạn viết một NUL
terminator mới trước vị trí của cái cũ, bạn sẽ rút ngắn chuỗi một cách hiệu quả.
Nói chung, không có cách nào bạn có thể kéo dài chuỗi bằng cách sử dụng bản hack này.
sed -i 's@longstring@foo@' a.out
nào? Điều này sẽ làm cho toàn bộ nhị phân nhỏ hơn 7 byte, Điều này sẽ không làm hỏng nhị phân?