您的意思是您想使用自己的代码在 python 或 c 中搜索任意文件中的十六进制模式?
您是否考虑过使用 regex 或 grep 来满足您的需求?
有些事情您应该注意
1) 文件偏移量不等于虚拟偏移量
2) 即使您设法映射文件,您也可能必须处理 aslr
2) 您需要重新了解 RVA ,VA ,文件偏移,文件对齐与节对齐等
这是一个示例 grep 演示(注意最后 5 个字节的相似性)
:\>grep -obaP "\x48\x8b\x45\xa8\x48\x8d\x1c\x02\x48\x8b\x45\xc8" nmap
2821223:H<E"H?∟☻H<EE
:\>printf "%x\n" 2821223
2b0c67
或 python 演示
源
D:\>cat nmap.py
import re
fin = open("d:/nmap" , "rb")
dat = fin.read()
fin.close()
pat = re.search("\x48\x8b\x45\xa8\x48\x8d\x1c\x02\x48\x8b\x45\xc8",dat)
offset = hex(pat.start())
print (offset)
结果
D:\>python nmap.py
0x2b0c67
现在您知道如何找到偏移量,您可以使用任何十六进制编辑器来打印字节
这是一个 xxd 演示
D:\>xxd -l 32 -g 1 -s 0x2b0c67 nmap
02b0c67: 48 8b 45 a8 48 8d 1c 02 48 8b 45 c8 48 89 c7 e8 H.E.H...H.E.H...
02b0c77: a3 d7 ff ff 48 89 c2 48 8b 45 c0 48 01 d0 48 39 ....H..H.E.H..H9
您可以简单地使用 binascii 在 python 中的偏移处打印字节,如下所示
D:\>type nmap.py
import re
import binascii
fin = open("d:/nmap" , "rb")
dat = fin.read()
pat = re.search("\x48\x8b\x45\xa8\x48\x8d\x1c\x02\x48\x8b\x45\xc8",dat)
offset = hex(pat.start())
print (offset)
print ( binascii.hexlify(dat[pat.start():pat.start()+16]))
fin.close()
D:\>
D:\>python nmap.py
0x2b0c67
488b45a8488d1c02488b45c84889c7e8