0

我需要在二进制文件的特定范围内搜索和替换字节字符串。

从字节 1000 到 2000 搜索 mytest.pcap

将 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
4

1 回答 1

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会允许“单线”,但这不是我的领域)。在 python 中,它可能看起来像这样:

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 个字节;对于这个尺寸,我相信这是相当安全的假设。

将代码段保存到名为 like 的文件subst_range.py中,然后运行python subst_range.py < mytest.pcap > mytest_mod.pcap​​.

于 2013-10-04T12:37:32.430 回答