2016-07-31 27 views
1

Beim Schreiben einige einfache Bibliotheken für Nasm, habe ich festgestellt, dass Etiketten, die nicht tatsächlich aufgerufen oder verwiesen werden immer noch in der Binärdatei enthalten sind.Assemblieren mit Nasm einschließlich nur referenzierte Blöcke von Code/Daten

Gibt es eine Möglichkeit zu vermeiden, unbenutzte Etiketten und ihren entsprechenden Code in das Objekt beim Aufbauen/Kompilieren/Zusammenbauen mit Nasm zu vermeiden?

+0

Verwenden Sie '.label', um lokale Beschriftungen zu erstellen. YASM enthält standardmäßig keine nicht globalen Beschriftungen in der Symboltabelle der Ausgabe. (Es schließt sie ein, wenn Sie '-gdwarf2' verwenden, um Debug-Informationen zu senden.) Ich bin mir nicht sicher, ob es etwas gibt, was Sie mit NASM tun können, um reguläre Symbole außer der' strip' zu deaktivieren. –

+0

@PeterCordes Es sind nicht nur die Symbole, sondern auch der Code, auf den das Symbol zeigt. Ich denke, ich muss vielleicht auf einige hackische Makros zurückgreifen, um das zu erreichen, aber ich würde es lieber nicht tun. – Fluffy

Antwort

2

Die Technologie dafür existiert bereits in Form von statischen Bibliotheken.

Setzen Sie jede separierbare Gruppe von Code + Daten in eine separate .o und erstellen Sie eine statische Bibliothek (.a) von all diesen Objekten (mit ar).

Bei der Verknüpfung mit dieser statischen Bibliothek werden automatisch nur die Objekte (.o Bibliothekselemente) eingezogen, die zur Erfüllung der Abhängigkeiten erforderlich sind. (Und AFAIK, das funktioniert rekursiv, zieht andere Bibliotheksobjekte ein, um unaufgelöste Symbole in dem anfänglichen Satz von Objekten zu befriedigen).

+0

Es wäre wahrscheinlich besser zu sagen, dass es automatisch nur die Objektdateien ('.o' Dateien) einzieht, die die referenzierten Symbole enthalten. –

+0

@RossRidge: Danke; Ich wollte das sagen, aber nach der Bearbeitung habe ich nicht bemerkt, dass ich nicht hatte! Ich habe bei einer Schnellsuche keine genauen Duplikate gefunden. Mehrere Fragen dazu, wie man eine statische Bibliothek erstellt, aber keine, in der die Frage nicht schon nach einer gesucht hat. TODO: Verknüpfe eine der guten Antworten zur Bibliothekserstellung, denke ich. –