搜索十六进制值并返回十六进制值和偏移量

时间:2016-12-14 17:43:23

标签: python hex

Jack去年以this Python script为我提供了帮助。这非常有用。现在我想再次使用它,但是这次输出必须是十六进制值,并且如果在大海捞针中找到“针”,那将是非常好的。这可能吗?

#!/usr/bin/python
import mmap
fd = open("file_to_search", "rb")
needle = "\x35\x5A\x3C\x2F\x74\x69\x6D\x65\x3E"
haystack = mmap.mmap(fd.fileno(), length = 0, access = mmap.ACCESS_READ)
i = haystack.find(needle)
while i >= 0:
    i += len(needle)
    print (haystack[i : i + 28])
    i = haystack.find(needle, i)

2 个答案:

答案 0 :(得分:0)

如果要更改的内容是显示,则需要更改print语句。此外,正如J-F Fabre所提到的,如果您使用的是Python3,则需要将搜索字符串更改为bytes对象。

对于Python3:

needle = b"\x35\x5A\x3C\x2F\x74\x69\x6D\x65\x3E"
...
print ("%08X: "%i, ', '.join("%02X"%(ch) for ch in haystack[i:i+28]))

对于Python2:

print ("%08X: "%i), ', '.join("%02X"%ord(ch) for ch in haystack[i:i+28])

答案 1 :(得分:0)

你可以用Python 2这样做:

 <?php
     $my_array = [];
     while($myvar=mysqli_fetch_array($sql_result)) {
         $my_array[] = $myvar;
     }
     $js_array = json_encode($my_array);
 ?>
 <script>
 var javascript_array = <?php echo $js_array; ?>;
 </script>

示例输出:

import mmap

with open("file_to_search", "rb") as fd:
    needle = "\x35\x5A\x3C\x2F\x74\x69\x6D\x65\x3E"
    needle_len = len(needle)
    haystack = mmap.mmap(fd.fileno(), length=0, access=mmap.ACCESS_READ)
    offset = haystack.find(needle)
    while offset >= 0:
        hex_string = ''.join(r'\x%02X' % ord(b)
                                for b in haystack[offset: offset+needle_len])
        print('offset: {}, needle: "{}"'.format(offset, hex_string))
        offset += needle_len
        offset = haystack.find(needle, offset)

由于offset: 3, needle: "\x35\x5A\x3C\x2F\x74\x69\x6D\x65\x3E" 的值永远不会改变,因此每次找到匹配项时显示其值似乎都是多余的。