embox

Форк
0
/
gensums.py 
49 строк · 1.3 Кб
1
#!/usr/bin/env python
2

3
import sys
4
import re
5

6
try:
7
    # Python2
8
    import md5
9
    md5factory = md5.new
10
    md5dig = lambda m: [ ord(x) for x in m.digest() ]
11
except ImportError:
12
    # Python3
13
    import hashlib
14
    md5factory = hashlib.md5
15
    md5dig = lambda m: list(m.digest())
16

17
def parse(file, sectname):
18
    vmas = dict()
19
    lens = dict()
20
    target_d = { 'vma' : vmas, 'len' : lens }
21

22
    for line in file.readlines():
23
        m = re.search(r'([0-9a-f]+)\s[A-Z]\s__module_(.*)_%s_(vma|len)' % (sectname,), line)
24
        if not m:
25
            continue
26

27
        target = target_d[m.group(3)]
28

29
        k = m.group(2)
30
        assert not k in target
31
        target[k] = int(m.group(1), 16)
32

33
    assert len(vmas) == len(lens)
34
    return dict( (k, (vmas[k], lens[k])) for k in vmas )
35

36
def main(nmfile, sectname, sectfile, vma_offset):
37
    stat = parse(sys.stdin, sectname)
38
    with open(sectfile, 'rb') as f:
39
        sectdata = f.read()
40

41
    for mod, (start, dlen) in stat.items():
42
        datastart = start - vma_offset
43
        m = md5factory()
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) ])))
47

48
if __name__ == '__main__':
49
    main(sys.stdin, sys.argv[1], sys.argv[2], int(sys.argv[3], 0))
50

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.