10
md5dig = lambda m: [ ord(x) for x in m.digest() ]
14
md5factory = hashlib.md5
15
md5dig = lambda m: list(m.digest())
17
def parse(file, sectname):
20
target_d = { 'vma' : vmas, 'len' : lens }
22
for line in file.readlines():
23
m = re.search(r'([0-9a-f]+)\s[A-Z]\s__module_(.*)_%s_(vma|len)' % (sectname,), line)
27
target = target_d[m.group(3)]
30
assert not k in target
31
target[k] = int(m.group(1), 16)
33
assert len(vmas) == len(lens)
34
return dict( (k, (vmas[k], lens[k])) for k in vmas )
36
def main(nmfile, sectname, sectfile, vma_offset):
37
stat = parse(sys.stdin, sectname)
38
with open(sectfile, 'rb') as f:
41
for mod, (start, dlen) in stat.items():
42
datastart = start - vma_offset
44
m.update(bytes(sectdata[datastart : datastart + dlen]))
45
print('const char __module_%s_%s_md5sum[16] = "%s";' %
46
(mod, sectname, ''.join([ '\\x{0:02x}'.format(x) for x in md5dig(m) ])))
48
if __name__ == '__main__':
49
main(sys.stdin, sys.argv[1], sys.argv[2], int(sys.argv[3], 0))