代码之家  ›  专栏  ›  技术社区  ›  Joal

使用python编辑磁盘图像文件中特定位置的十六进制值

  •  0
  • Joal  · 技术社区  · 7 年前

    如何使用Python编辑磁盘映像文件(60GB)特定扇区的十六进制值?

    Example:
    Given 512,
    
    File name: RAID.img
    Typical File size: 60gb+
    Sector: 3
    Address Offset: 0000060A - 0000060F
    Value: 0f, 0a , ab, cf, fe, fe
    

    我能想到的代码是:

    fname = 'RAID.img'
    with open(fname, 'r+b') as f:
        newdata = ('\x0f\x0a\xab\xcf\xfe\xfe')
        print newdata.encode('hex')
    

    如何修改扇区=3中的数据,地址从00000 60A到00000 60F? 有图书馆可以用吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   randomir    7 年前

    如果您知道要更新的数据的确切偏移量(字节位置),可以使用 file.seek ,后跟 file.write :

    #!/usr/bin/env python
    
    offset = 0x60a
    update = b'\x0f\x0a\xab\xcf\xfe\xfe'
    
    with open('raid.img', 'r+b') as f:
        f.seek(offset)
        f.write(update)
    

    如果数据文件很小(可能高达1MB),可以将完整的二进制文件读入 bytearray ,播放(修改)内存中的数据,然后将其写回文件:

    #!/usr/bin/env python
    
    offset = 0x60a
    update = b'\x0f\x0a\xab\xcf\xfe\xfe'
    
    with open('raid.img', 'r+b') as f:
        data = bytearray(f.read())
        data[offset:offset+len(update)] = update
        f.seek(0)
        f.write(data)