【问题标题】:Editing hex value at a particular position in disk image file using python使用python在磁盘映像文件中的特定位置编辑十六进制值
【发布时间】:2017-11-04 14:18:25
【问题描述】:

如何使用 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')

如何修改 Sector = 3 中的数据,地址是从 0000060A - 0000060F? 有什么图书馆可以用吗?

【问题讨论】:

    标签: python python-2.7 hex hexdump raid


    【解决方案1】:

    如果您知道要更新的数据的确切偏移量(字节位置),可以使用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)
    

    【讨论】:

    • 忘了说,我的磁盘映像大小是 60+gb
    • 如何将第一个十六进制值(当前为 0xf)从 x01 循环到 xof ? >>> 更新 = b'\x0f\x0a\xab\xcf\xfe\xfe'
    • 对不起,我不明白你的后续问题。
    • 我想将十六进制值 x01 循环到 x0f 仅用于第一个十六进制值 AT 变量“ update = b'\x0f
    • 我不确定我是否理解这一点。你想在文件的某个位置插入 15 个字节 \x01...\x0f
    猜你喜欢
    • 2020-01-30
    • 2016-08-10
    • 2011-03-14
    • 2012-05-10
    • 2011-06-10
    • 2010-11-22
    • 1970-01-01
    • 2018-02-01
    • 2015-04-13
    相关资源
    最近更新 更多