2013-10-04 36 views
0

我需要搜索並替換二進制文件中特定範圍內的字節字符串。Unix中的二進制替換範圍

搜索到mytest.pcap從字節1000〜2000

更換X93 \ X33 \ X59 \ X05 \ X00 X93與\ X33 \ X59 \ X00 \ X0

謝謝, 裏卡多


我的方法:

sed 's/\x93\x33\x59\x05\x00/\x93\x33\x59\x00\x00/g' mytest.pcap > mytest_mod.pcap 

回答

0

您使用的sed行看起來不錯,所以我猜想剩下的就是範圍。除非你有幾分嚴格的性能要求,我認爲這可能是工作:

(head -c1000 mytest.pcap; 
tail -c+1001 mytest.pcap | head -c1000 | sed 's/.../.../g'; 
tail -c+2001 mytest.pcap) > mytest_mod.pcap 

更新

如果性能是一個問題,我覺得有沒有其他的選擇,而不是寫一個用途單一的程序(也許perl將允許「單線」,但這不是我的領域)。在蟒蛇可能是這樣的:

import sys 
import re 

sys.stdout.write(sys.stdin.read(1000)) 
range = sys.stdin.read(1000) 
sys.stdout.write(re.sub('\x93\x33\x59\x05\x00', '\x93\x33\x59\x00\x00', range)) 
while True: 
    buf = sys.stdin.read() 
    if buf: 
     sys.stdout.write(buf) 
    else: 
     break 

注意,它強烈地依賴於read(1000)真的會看那些1000個字節;對於這個尺寸,我相信這是相當安全的假設。

將片段保存到名爲subst_range.py的文件,然後運行python subst_range.py <mytest.pcap> mytest_mod.pcap

+0

This Works!但該文件是50MB,所以你的方法有性能問題.. – Riccardo79

+0

我試圖寫下perl中的代碼。根據你的意見,@ volverine,是否可以直接修改mytest.pcap文件? – Riccardo79

+0

是的,它是;只有我不確定它會幫助你做什麼,可能是磁盤空間。但除非你使用非常不尋常的設備,否則50MB不是問題,或者它是? – volferine