You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
2.0 KiB

#!/usr/bin/python
import re, sys, os
line_regex = re.compile(r'(?P<path>.+), (?P<low>0x[0-9a-fA-F]+)-(?P<high>0x[0-9a-fA-F]+)')
tool_output = {}
app_output = {}
for line in open(sys.argv[1]).readlines():
match = line_regex.match(line)
if os.path.abspath(match.group(1)) not in tool_output:
tool_output[os.path.abspath(match.group(1))] = []
tool_output[os.path.abspath(match.group(1))].append((int(match.group(2), 16), int(match.group(3), 16)))
for line in open(sys.argv[2]).readlines():
match = line_regex.match(line)
if os.path.abspath(match.group(1)) not in app_output:
app_output[os.path.abspath(match.group(1))] = []
app_output[os.path.abspath(match.group(1))].append((int(match.group(2), 16), int(match.group(3), 16)))
for img, segments in list(app_output.items()):
if img not in tool_output:
print("An image visible to the app was not found by pin image load callbacks...")
sys.exit(1)
# iterate over the segments in the image
for segment in segments:
segment_found = False
# iterate over the image regions (pin struct)
for region in tool_output[img]:
# Check if the segment is contained in one of
# the regions. It should!
if segment[0] >= region[0] and segment[1] <= region[1]:
segment_found = True
if not segment_found:
print("Couldn't find text/data segment in any of the image regions!")
for region in tool_output:
# Check if the segment is contained in one of
# the regions. It should!
if segment[0] >= region[0] and segment[1] <= region[1]:
segment_found = True
if not segment_found:
print("Couldn't find text/data segment in any of the image regions!")
for region in tool_output[img]:
print("Image: {0}, region [{1}, {2}]".format(img, region[0], region[1]))
print("Image: {0}, segment[{1}, {2}]".format(img, segment[0], segment[1]))
sys.exit(1)
sys.exit(0)