读取原始磁盘映像(dd)时找不到jpg标头

问题描述 投票:0回答:1

我正在使用python 3读取原始磁盘映像。我的任务是从磁盘映像中检索(雕刻)jpg作为单个文件。据我了解,jpg的标头模式(\xd8\xff\xe0\xd8\xff\xe1)。我想知道读取文件时从哪里得到的。

fobj = open('carve.dd', 'rb')
data = fobj.read(32)

while data != '':
 head_loc = findheader(data)
 print(head_loc)
 data = fobj.read(32)

def findheader(data) :  # to find header in each 32 bytes of data of raw disk image
 for i in range(0, len(data) - 3) :
  if data[i] == b'\xff' :
    if data[i+1:i+4] == b'\xd8\xff\xe0' or data[i+1:i+4] == b'\xd8\xff\xe1' :
      return i
 return -1

相同的代码在Python 2中正常工作。在Python 2中,我能够在几秒钟内从图像获取标头。有人可以帮帮我吗,Python 3有什么问题?

此代码段实际上来自此https://github.com/darth-cheney/JPEG-Recover/blob/master/jpegrecover2.py在Python 2中可以正常运行,但在Python 3中则不能。在链接中运行代码时,请不要忘记出现不一致的制表符错误。我再次输入VS代码。

python python-3.x jpeg
1个回答
0
投票

[就像俗话说的那样,我有一些坏消息和一些好消息。不好的是,我无法弄清楚为什么您的代码在Python的第2版和第3版中都无法正常工作。

好处是,我能够使用您提供的示例数据来重现问题,但更重要的是-能够设计出不仅在两个版本中均能始终如一地工作的东西,而且可能更快地[[多]],因为它不会t使用for循环搜索每个数据块以查找.jpg标头模式。def findheader(data): # to find header in each 32 bytes of data of raw disk image try: return data.index(b'\xff\xd8\xff\xe0') except ValueError: try: return data.index(b'\xff\xd8\xff\xe1') except ValueError: return -1

© www.soinside.com 2019 - 2024. All rights reserved.