我正在尝试在二进制文件中搜索一系列十六进制值,但是,我遇到了一些无法完全解决的问题。 (1) 我不知道如何搜索整个文件并返回所有匹配项。目前,我的 f.seek 只达到了我认为可能的值,这不好。 (2) 我想以十进制或十六进制形式返回可能匹配的偏移量,尽管每次都得到 0,所以我不确定我做错了什么。
示例.bin
AA BB CC DD EE FF AB AC AD AE AF BA BB BC BD BE
BF CA CB CC CD CE CF DA DB DC DD DE DF EA EB EC
code:
# coding: utf-8
import struct
import re
with open("example.bin", "rb") as f:
f.seek(30)
num, = struct.unpack(">H", f.read(2))
hexaPattern = re.compile(r'(0xebec)?')
m = re.search(hexaPattern, hex(num))
if m:
print "found a match:", m.group(1)
print " match offset:", m.start()
也许有更好的方法来完成这一切?
- 我不确定如何搜索整个文件并返回所有匹配项。
- 我想以十进制或十六进制返回偏移量
import re
f = open('data.txt', 'wb')
f.write('\xAA\xBB\xEB\xEC')
f.write('\xAA\xBB\xEB\xEC')
f.write('\xAA\xBB\xEB\xEC')
f.write('\xAA\xBB\xEB\xEC')
f.write('\xAA\xBB\xEB\xEC')
f.write('\xAA\xBB\xEB\xEC')
f.write('\xAA\xBB\xEB\xEC')
f.close()
f = open('data.txt', 'rb')
data = f.read()
f.close()
pattern = "\xEB\xEC"
regex = re.compile(pattern)
for match_obj in regex.finditer(data):
offset = match_obj.start()
print "decimal: {}".format(offset)
print "hex(): " + hex(offset)
print 'formatted hex: {:02X} \n'.format(offset)
--output:--
decimal: 2
hex(): 0x2
formatted hex: 02
decimal: 6
hex(): 0x6
formatted hex: 06
decimal: 10
hex(): 0xa
formatted hex: 0A
decimal: 14
hex(): 0xe
formatted hex: 0E
decimal: 18
hex(): 0x12
formatted hex: 12
decimal: 22
hex(): 0x16
formatted hex: 16
decimal: 26
hex(): 0x1a
formatted hex: 1A
文件中的位置像列表一样使用基于 0 的索引。
e.finditer(模式、字符串、标志=0)
返回一个迭代器,生成所有 MatchObject 实例
字符串中 RE 模式的非重叠匹配。该字符串是
从左到右扫描,并按找到的顺序返回匹配项。
匹配对象支持以下方法和属性:
开始([组])
结束([组])
返回开始和结束的索引
组匹配的子字符串;组默认为零(意味着
整个匹配的子字符串)。
https://docs.python.org/2/library/re.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)