python编辑二进制文件内的字符

本文介绍如何使用Python处理ceph中的omap二进制文件,替换其中的inode内容。通过binascii库,实现对二进制文件的字符替换,并确保在不足12位时在前面填充0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

ceph里面的omap数据是二进制的文件,需要对里面的内容进行替换

数据

[root@lab101 opt]# hexdump -C b_head
00000000  02 00 00 00 00 00 00 00  4c 0f 00 00 00 00 01 00  |........L.......|
00000010  00 08                                             |..|
00000012

原始数据是一个二进制文件,其中里面的inode是0f 00 00 00 00 01,这个是一个反转的字符,实际应该是01 00 00 00 00 0f ,所以替换需要做些处理

这里用到了python自带的库binasscii这个

代码如下

#! /usr/bin/python
# -*- coding:utf=8 -*-
import binascii
#硬链接的字符编码是固定的,我们不用本地读取,直接构建即可
#原始反转byte后字符串为: 08000001000000000f4c0000000000000002
basestr="080000ffffffffffff4c0000000000000002"
baseinode="ffffffffffff"
#改成指定位数的修改会比较好点,这样不管之前的代码是什么,可以直接构建了
#下面的方法是读取的二进制的,这里我直接构建字符串的方法
#hexdata = binascii.hexlify(a)
#print hexdata
#newhexdata = binascii.unhexlify(hexdata)
#newstr=hexdata[:: - 1 ]
newnewstr=basestr.replace(baseinode,"010000000011")
#反转回来(要对二进制反转不能字符反转)
newbin=binascii.unhexlify(newnewstr)[:: - 1 ]
with open("foo", "wb") as n:
    n.write(newbin)

上面的inode是十二位,如果不足十二位,实际注意在前面补0

替换后的效果

[root@lab101 opt]# hexdump -C foo
00000000  02 00 00 00 00 00 00 00  4c 11 00 00 00 00 01 00  |........L.......|
00000010  00 08                                             |..|
00000012

总结

本篇记录二进制编辑的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武汉磨磨

打赏是写出更好教程的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值