Wie könnte ich das Speicherlayout aus einer .map-Datei grafisch anzeigen? [closed]

Lesezeit: 6 Minuten

Benutzeravatar von JeffV
JeffV

Meine gcc-Build-Toolchain erzeugt eine .map-Datei. Wie stelle ich die Memory Map grafisch dar?

  • Diese Frage interessiert mich sehr. Hatte gehofft, dass du ein paar nette Antworten bekommst. Aber vielleicht stimmt jeder wie ich nur deiner Frage zu und wartet 🙂 Bleib dran. Cheers – Prakash

    – Prakasch

    9. September 2008 um 12:13 Uhr

  • Bei einer Liste von Tupeln (Adresse, Symboltyp, Symbolname) aus einer Kartendatei ist nicht sofort ersichtlich, welche Arten von Diagrammen konstruiert werden könnten. Könnten Sie die Frage überarbeiten, um zu erklären, was Sie visualisieren möchten?

    – David Joyner

    9. September 2008 um 13:47 Uhr

  • Probier diese: absint.com/stackanalyzer Ich benutze GCC nicht, also kann ich wirklich nicht antworten, dachte aber, der Link könnte das sein, wonach Sie suchen.

    – Mauro

    10. September 2008 um 12:28 Uhr

  • Ich verstehe nicht, warum dies geschlossen wurde. Es gibt keine Kommentare, die darauf hindeuten, dass die Fragen nicht fokussiert sind, und die Frage ist sehr spezifisch. “So zeigen Sie eine Kartendatei grafisch an” . Die Frage sollte neu aufgerollt werden.

    – Jay M

    27. Juni um 7:12

  • Ich kann diese Antwort nicht hinzufügen, da die Frage geschlossen ist, aber dieses Tool erledigt die Arbeit: sikorskiy.net/info/prj/amap

    – Jay M

    27. Juni um 7:12

Benutzeravatar von Frank Krüger
Frank Krüger

Hier sind die Anfänge eines Skripts in Python. Es lädt die Kartendatei in eine Liste von Abschnitten und Symbolen (erste Hälfte). Anschließend wird die Karte mithilfe von HTML gerendert (oder mit der sections und symbols Listen).

Sie können das Skript steuern, indem Sie diese Zeilen ändern:

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>"

Und hier ist ein schlechtes Rendering des ausgegebenen HTML:

Karte

  • Vielen Dank. Es kann genauer gemacht werden, indem die Lücke von 1 Pixel berücksichtigt wird. Außerdem möchten Sie in dieser “Karte” Links zu einer Art Schlüssel-/Wörterbuchabschnitt auf der Seite erstellen. Aber ja, das könnte nützlich sein.

    – Frank Krüger

    26. September 2008 um 22:09 Uhr

  • Hast du es geschrieben. WENN ja, Sie haben dieses Skript geschrieben, um diese Frage zu beantworten? oder Sie haben es für Ihren regelmäßigen Gebrauch geschrieben?

    – Krallen

    24. März 2010 um 8:28 Uhr

  • @Frank Krueger, ich habe Python noch nie verwendet, ich habe gerade die neueste Version v.3.2 oder Windows installiert und konnte das obige Skript nicht ausführen. Könnte bitte jemand das Skript reparieren, es sind wahrscheinlich nur kleinere Probleme.

    – dasAls

    2. August 2011 um 7:39 Uhr

  • Funktioniert bei meiner Kartendatei leider überhaupt nicht. Es hilft nicht, dass das .map-Format nicht sehr computerlesbar zu sein scheint.

    – Timmm

    21. Oktober 2016 um 8:51 Uhr

  • Dies scheint eine Version von Python vor 2.4 zu verwenden. Ich habe versucht, es unter Python 3.x zu verwenden, musste den Druckanweisungen Klammern hinzufügen, aber dann blieb es bei der Sortierfunktion hängen, wobei eine Lambda-Funktion verwendet wurde, bei der ein Schlüsselargument erwartet wurde. Ich kenne Python & Lambdas nicht gut genug, um im Moment daran vorbeizukommen.

    – Nerf Herder

    4. Januar 2017 um 23:13 Uhr

Benutzeravatar von Sredni
Sredni

Ich habe ein C#-Programm geschrieben, um die Informationen in einer Map-Datei zusammen mit Informationen anzuzeigen, die normalerweise nicht in der Map-Datei vorhanden sind (wie statische Symbole, sofern Sie diese verwenden können binutils). Der Code ist verfügbar hier. Kurz gesagt, es analysiert die Kartendatei und verwendet sie auch BINUTILS (falls verfügbar), um weitere Informationen zu erhalten. Um es auszuführen, müssen Sie den Code herunterladen und das Projekt unter Visual Studio ausführen, zum Kartendateipfad navigieren und klicken Analyze.

Hinweis: Funktioniert nur für GCC/LD Kartendateien

Bildschirmfoto:
[3]

  • Nur auf Ihre eigenen Sachen zu verlinken ist keine gute Antwort. Eine gute Antwort, die eine externe Ressource umfasst, enthält die wesentlichen Teile der Antwort hier für zukünftige Benutzer und verweist auf Folgendes: Was ist das für eine Sache, von der du sprichst? Wo installiere ich es? Wie installiere ich es? Wie benutze ich dieses Ding, um das zu lösen genaues Problem Ich habe in meiner Frage? Bist du mit diesem Ding in irgendeiner Weise, Form oder Gestalt verbunden? Sehen: Wie kann ich Community-freundlich auf eine externe Ressource verlinken?

    – Mogsdad

    9. März 2016 um 16:49 Uhr

  • OK, ich habe einige Änderungen vorgenommen. Darüber hinaus sehe ich nichts, was ich hinzufügen könnte. Was ist das für eine Sache, von der du sprichst? – Selbstverständlich – es ist ein Kartendatei-Parser/Viewer. Wo/wie installiere ich es? – Windows, Projekt mit Visual Studio ausführen Wie verwende ich dieses Ding, um genau das Problem zu lösen, das ich in meiner Frage habe? – Laden Sie die Kartendatei, führen Sie die Software aus Bist du mit diesem Ding in irgendeiner Weise, Form oder Gestalt verbunden? – Äh, ja, ich habe es geschrieben.

    – Sredni

    10. März 2016 um 6:36 Uhr


  • Funktioniert das auch mit mono?

    – Benutzer1273684

    26. Januar 2018 um 15:13 Uhr

  • Es könnte sein, aber ich habe es nicht ausprobiert. Die wichtigste externe Abhängigkeit ist ObjectListView, die gemäß ihrer FAQ meistens funktioniert auf Mono.

    – Sredni

    28. Januar 2018 um 3:29 Uhr

  • Unabhängig von anderen Kommentaren mag ich dieses Tool. Ich habe es jetzt mehrere Male benutzt und es wird heruntergeladen, erstellt und funktioniert einfach in Sekunden!

    – Ashley Duncan

    3. Mai 2018 um 9:15 Uhr

1414770cookie-checkWie könnte ich das Speicherlayout aus einer .map-Datei grafisch anzeigen? [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy