用于重新模块的带转义符的字节


import re
a = 0xf27f28d7
b = a.to_bytes(4, 'little')
with open(fimage, 'rb') as f:
print([hex(m.start(0)] for m in re.finditer(b, f.read()))
# b = b'xd7(x7fxf2'

以上代码返回错误:

缺失(,位置1 处的未终止子模式

我知道字节中包含一个(。它应该是(。如何转换为字节以确保转义没有错误?我使用的是Python 3.6。提前谢谢。

你可以像一样转换你的字节

b = b'xd7(x7fxf2'
b = ''.join(['\x'+hex(c)[2:] for c in b]).encode()

您可以使用re.escape(),但它也会转义与可打印字符不对应的字节,因此需要将它们过滤掉。

import re
b = b'xd7(x7fxf2'
k = []
for i in b:
i_bytes = bytes([i])
if i < 0x80 and chr(i).isprintable():
i_bytes = re.escape(i_bytes)
k.append(i_bytes)
print(b''.join(k))  # -> b'xd7\(x7fxf2'

我确信这个代码可以改进,只是不确定如何改进。

相关内容

最新更新