【问题标题】:python re.search can't find existing patternpython re.search找不到现有模式
【发布时间】:2021-08-02 20:03:35
【问题描述】:
import re

pattern = 'E8 AC 82 18 00 48 89 5C 24 08 48 8B B3'
pattern2 = '5C 24 08 48 8B B3'

code = bytes.fromhex('0D 00 00 84 C0 74 0A 8A 44 24 0E 88 05 0F EB 4A 00 48 83 C4 38 5B 41 5E C3 CC 55 41 57 41 56 41 55 41 54 53 48 81 EC 68 02 00 00 48 89 FB 48 8B BF 28 04 00 00 E8 92 09 39 00 48 8B B3 D8 02 00 00 BF 09 DB 55 00 BA 88 13 00 00 E8 AC 82 18 00 48 89 5C 24 08 48 8B B3 D8 02 00 00 BF 4E DD 55 00 BA 98 3A 00 00 E8 91 82 18 00 BF A8 50 A1 00 E8 EB 13 4A 00 83 25 EC 83 4B 00 00 31 ED 4C 8B 35 6B 83 4B 00 41 BC 60 50 A1 00 C7 44 24 10 00 00 00 00 4D 39 E6 74 44 4C 89 F3 49 8B 46 40 44 8B 68 1C 44 01 ED 44 8B 78 18 4C 89 F7 E8 4E 7C F5 FF 49 89 C6 45 09 EF 75 D9 BE 60 50 A1 00 48')

offset = re.search(bytes.fromhex(pattern), code)

print(offset)

不返回

offset = re.search(bytes.fromhex(pattern2), code)

print(offset2)

返回

较长的图案有什么问题?

【问题讨论】:

  • 字节中可能有一些正则表达式特有的字符(如()[]+*)。最好使用字节的“查找”或“索引”方法。
  • 解决了...这么简单...????

标签: python


【解决方案1】:
>>> bytes.fromhex('5C 24')
b'\\$'

在该模式中,反斜杠被解释为转义 $。但在code 中,它会保留并阻止模式匹配(因为模式与反斜杠不匹配)。

第二个模式没有这个问题,因为它只在反斜杠之后开始匹配

【讨论】:

  • 感谢您的解释,但是有没有办法将它与整个模式匹配(我需要正则表达式模式)?
  • 不确定你的意思。如果您希望该模式匹配,则需要调整 code 值。
【解决方案2】:
import re

pattern = bytes.fromhex('E8 AC 82 18 00 48 89 5C 24 08 48 8B B3'

code = bytes.fromhex('0D 00 00 84 C0 74 0A 8A 44 24 0E 88 05 0F EB 4A 00 48 83 C4 38 5B 41 5E C3 CC 55 41 57 41 56 41 55 41 54 53 48 81 EC 68 02 00 00 48 89 FB 48 8B BF 28 04 00 00 E8 92 09 39 00 48 8B B3 D8 02 00 00 BF 09 DB 55 00 BA 88 13 00 00 E8 AC 82 18 00 48 89 5C 24 08 48 8B B3 D8 02 00 00 BF 4E DD 55 00 BA 98 3A 00 00 E8 91 82 18 00 BF A8 50 A1 00 E8 EB 13 4A 00 83 25 EC 83 4B 00 00 31 ED 4C 8B 35 6B 83 4B 00 41 BC 60 50 A1 00 C7 44 24 10 00 00 00 00 4D 39 E6 74 44 4C 89 F3 49 8B 46 40 44 8B 68 1C 44 01 ED 44 8B 78 18 4C 89 F7 E8 4E 7C F5 FF 49 89 C6 45 09 EF 75 D9 BE 60 50 A1 00 48')

offset = re.search(re.escape(pattern), code)

print(offset)

解决了.. 这么简单,但首先我需要动动脑筋并阅读手册... ?

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 2018-01-16
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多