在二进制文件中找到模式?

时间:2018-11-10 19:14:28

标签: python python-2.x

我有这两个功能:

def make_regex_from_hex_sign(hex_sign):
    regex_hex_sign = re.compile(hex_sign.decode('hex'))
    return regex_hex_sign

def find_regex_pattern_and_return_its_offset(regex_pattern, bytes_array):
    if found_regex_pattern in regex_pattern.finditer(bytes_array):
        return found_regex_pattern.start()
    else:
        return 0

我正在像这样使用它们:

pattern = make_regex_from_hex_sign("634351535F")
file = open('somefile.bin', 'rb')
allbytes = file.read()
offset = find_regex_pattern_and_return_its_offset(pattern, allbytes)

Python抛出:NameError: global name 'found_regex_pattern' is not defined

如果我在if中将for替换为if found_regex_pattern in regex_pattern.finditer(bytes_array),则可以使用,但是最后我需要break才能阻止它搜索经过首次发现的模式迭代。是否有更优雅的方法可以解决此问题,而无需使用forbreak

1 个答案:

答案 0 :(得分:0)

您没有定义found_regex_pattern。 当您执行从if到for的更改时,它的工作是有效的,因为它是有效的语法,这意味着found_regex_pattern充当可迭代的regex_pattern.finditer(bytes_array)的条目。