linux – 如何转储二进制文件的一部分

我有二进制,想要提取一部分,从知道的字节串(即FF D8 FF D0)开始,以已知的字节串(AF FF D9)结束,

在过去,我已经使用dd从开始/结束部分二进制文件,但这个命令似乎不支持我所要求的.

终端可以做什么工具?

解决方法

在单个管道中:
xxd -c1 -p file |
  awk -v b="ffd8ffd0" -v e="aaffd9" '
    found == 1 {
      print $0
      str = str $0
      if (str == e) {found = 0; exit}
      if (length(str) == length(e)) str = substr(str,3)}
    found == 0 {
      str = str $0
      if (str == b) {found = 1; print str; str = ""}
      if (length(str) == length(b)) str = substr(str,3)}
    END{ exit found }' |
  xxd -r -p > new_file
test ${PIpestATUS[1]} -eq 0 || rm new_file

这个想法是在两个xxd之间使用awk来选择所需文件的一部分.一旦找到第一个模式,awk打印字节,直到找到第二个模式并退出.

必须考虑到第一种模式被找到而第二种不是的情况.它在awk脚本的END部分完成,返回非零退出状态.这是由bash的${PIpestATUS [1]}捕获,我决定删除文件.

请注意,空文件也意味着没有找到任何内容.

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...