我怎么能从一个.map文件graphics显示内存布局?

我的gcc构build工具链生成一个.map文件。 如何以graphics方式显示内存映射?

这是Python中脚本的开始。 它将地图文件加载到剖面和符号列表中(上半部分)。 然后使用HTML呈现地图(或者根据sectionssymbols列表做任何你想做的事情)。

您可以通过修改这些行来控制脚本:

 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 "<html><head>" print " <style>a { color: black; text-decoration: none; font-family:monospace }</style>" print "<body>" print "<table cellspacing='1px'>" for sym in symbols: section = section_from_address(sym.address) height = (total_height/total_size) * sym.size font_size = 1.0 if height > 1.0 else height print "<tr style='background-color:#%s;height:%gem;line-height:%gem;font-size:%gem'><td style='overflow:hidden'>" % \ (segment_colors[section.segment], height, height, font_size) print "<a href='#%s'>%s</a>" % (sym.name, sym.name) print "</td></tr>" print "</table>" print "</body></html>" 

这是一个很糟糕的HTML输出:

地图

我已经写了一个C#程序来显示地图文件中的信息以及地图文件中通常不存在的信息(比如提供了可以使用binutils静态符号)。 代码在这里可用。 简而言之,它parsing映射文件,并使用BINUTILS (如果可用)收集更多信息。 要运行它,您需要下载代码并在Visual Studio下运行项目,浏览到地图文件path并单击Analyze

注意:只适用于GCC/LD地图文件

屏幕截图:[ 3]