我的gcc构建工具链生成一个.map文件.如何以图形方式显示内存映射?
这是Python中脚本的开头.它将地图文件加载到Sections和Symbols列表中(上半部分).然后,它使用HTML呈现地图(或使用sections
和symbols
列表执行任何操作).
您可以通过修改以下行来控制脚本:
with open('t.map') as f: colors = ['9C9F84', 'A97D5D', 'F7DCB4', '5C755E'] total_height = 32.0
map2html.py
from __future__ import with_statement import re class Section: def __init__(self, address, size, segment, section): self.address = address self.size = size self.segment = segment self.section = section def __str__(self): return self.section+"" class Symbol: def __init__(self, address, size, file, name): self.address = address self.size = size self.file = file self.name = name def __str__(self): return self.name #=============================== # Load the Sections and Symbols # sections = [] symbols = [] with open('t.map') as f: in_sections = True for line in f: m = re.search('^([0-9A-Fx]+)\s+([0-9A-Fx]+)\s+((\[[ 0-9]+\])|\w+)\s+(.*?)\s*$', line) if m: if in_sections: sections.append(Section(eval(m.group(1)), eval(m.group(2)), m.group(3), m.group(5))) else: symbols.append(Symbol(eval(m.group(1)), eval(m.group(2)), m.group(3), m.group(5))) else: if len(sections) > 0: in_sections = False #=============================== # Gererate the HTML File # colors = ['9C9F84', 'A97D5D', 'F7DCB4', '5C755E'] total_height = 32.0 segments = set() for s in sections: segments.add(s.segment) segment_colors = dict() i = 0 for s in segments: segment_colors[s] = colors[i % len(colors)] i += 1 total_size = 0 for s in symbols: total_size += s.size sections.sort(lambda a,b: a.address - b.address) symbols.sort(lambda a,b: a.address - b.address) def section_from_address(addr): for s in sections: if addr >= s.address and addr < (s.address + s.size): return s return None print "" print " " print "" print "
" % \ (segment_colors[section.segment], height, height, font_size) print "%s" % (sym.name, sym.name) print " |
这是对它输出的HTML的糟糕渲染:
我编写了一个C#程序来显示Map文件中的信息以及地图文件中通常不存在的信息(如您可以使用的静态符号binutils
).代码可在此处获得.简而言之,它解析映射文件,并使用BINUTILS
(如果可用)收集更多信息.要运行它,您需要下载代码并在visual studio下运行项目,浏览到地图文件路径并单击Analyze
.
注意:仅适用于GCC/LD
地图文件
截图:[