Ich versuche, ein Objekt zu bauen, das für ARM mit gcc gebaut wurde. Leider, objdump versucht zu erraten, ob der Code ist ARM und Daumen, und ist immer falsch: es denkt, mein Code ist Thumb, wenn seine tatsächlich ARM. Ich sehe, dass objdump eine Möglichkeit hat, es zu erzwingen, um alle Anweisungen als Thumb (-Mforce-thumb) zu interpretieren, aber es hat keinen, den ARM-Modus zu erzwingen. Das scheint mir eine sehr seltsame Unterlassung zu mir zu sein, und seine ernsthaft beeinträchtigen meine Fähigkeit zu bekommen Arbeit getan (Im auf einem eingebetteten Gerät und meine einzige Mittel zum Debuggen ist, um die Demontage zu betrachten). Ive versucht verschiedene Ansätze, einschließlich des Versuchs zu sagen, objdump, um eine ARM-Architektur, die nicht unterstützt Thumb, aber nichts scheint zu funktionieren. Irgendwelche Ideen (und ja, ich weiß, dass die Anweisungen wirklich ARM sind.) Fragte Aug 25 11 um 16:43 Das klingt wie ein Bug in Compilerlinker oder Objdump. Normalerweise sollten die Symbole richtig markiert werden, wenn sie Daumen oder ARM sind und entsprechend zerlegt werden. Das heißt, theres ein paar Dinge, die Sie ausprobieren können: interpretieren Sie Datei als einfache binäre (-b binäre - D) - das wird die Symbolprüfung deaktivieren und wird die gesamte Datei als ARM zerlegen. Nachteil: viel Müll in der Ausgabe, keine netten Adressen. Verwenden Sie IDA Pro. Auch wenn es falsch rät, kann man seine Entscheidung immer überschreiben. Auch, es ist eine viel schönere Disassembly-Umgebung :) Antwort # 25 11 at 16:56 Ich brauche die Symbol-Informationen, so dass ich weiß, was I39m Blick auf, so mit rohen Binär doesn39t schneiden, I39m Angst. Die fragliche Datei hat Debugging-Informationen, so dass die Markierungsinformationen dort sein sollten. Mein Build-Prozess ist gefaltet, aber beinhaltet gcc in allen Ideen, was könnte Strippen aus dem Symbol Markierung ndash David Gegeben am 26. August 11 um 10:42 Es ist schwer zu sagen, was genau ist das Problem. Drucken Sie den Inhalt der Symboltabelle und betrachten Sie printinsn (arm) in arm-dis. c. Vielleicht gibt das dir ein paar Ideen. Ndash Igor Skochinsky Aug 26 11 bei 13: 30Linux Objdump Befehl Beispiele (Zerlegen einer Binärdatei) Objdump Befehl in Linux wird verwendet, um gründliche Informationen über Objektdateien zur Verfügung zu stellen. Dieser Befehl wird hauptsächlich von den Programmierern verwendet, die an Compilern arbeiten, aber immer noch ein sehr praktisches Werkzeug für normale Programmierer auch wenn es um Debugging geht. In diesem Artikel werden wir verstehen, wie man objdump Befehl durch einige Beispiele verwenden. Grundsätzliche Syntax von objdump ist: Für diesen Befehl steht eine breite Palette von Optionen zur Verfügung. Wir werden versuchen, eine gute Menge von ihnen in diesem Tutorial zu decken. Die ELF-Binärdatei des folgenden C-Programms wird in allen in diesem Artikel erwähnten Beispielen verwendet. Hinweis: Das oben genannte ist nur ein Testcode, der für einen anderen Zweck verwendet wurde, aber ich fand es einfach genug, um für diesen Artikel zu verwenden. 1. Zeigen Sie den Inhalt des gesamten Datei-Headers mit der Option - f an. Betrachten Sie folgendes Beispiel: So sehen wir, dass die Informationen zum Gesamt-Datei-Header in der Ausgabe angezeigt wurden. HINWEIS: Das ausführbare Format, das in den Beispielen verwendet wird, ist ELF. Um mehr darüber zu erfahren, verweisen wir auf unseren Artikel über das ELF-Dateiformat. 2.Display-Objektformat spezifische Datei-Header-Inhalte mit Option - p Das folgende Beispiel druckt die Objektdateiformatspezifische Informationen. 3. Zeigen Sie den Inhalt der Abschnittsüberschriften mit der Option - h an. Es können verschiedene Abschnitte in einer Objektdatei vorhanden sein. Informationen, die mit ihnen verknüpft sind, können mit der Option - h gedruckt werden. Die folgenden Beispiele zeigen verschiedene Abschnitte. Wie Sie sehen, gibt es insgesamt 26 (nur teilweise Ausgabe wird hier gezeigt). So sehen wir, dass die Informationen zu allen Abschnittsüberschriften in der Ausgabe gedruckt wurden. In der obigen Ausgabe ist Größe die Größe des geladenen Abschnitts, VMA repräsentiert die virtuelle Speicheradresse, LMA repräsentiert die logische Speicheradresse, Datei aus ist dieser Abschnitt8217s Offset vom Anfang der Datei, Algn stellt die Ausrichtung, INHALT, ALLOC, LOAD dar , READONLY, DATA sind Flags, die repräsentieren, dass ein bestimmter Abschnitt LOADED oder READONLY etc. sein soll. 4. Zeigen Sie den Inhalt aller Header mit der Option - x an. Informationen, die sich auf alle Header in der Objektdatei beziehen, können mit der Option - x abgerufen werden Option. Im folgenden Beispiel werden alle Abschnitte angezeigt (hier wird nur eine partielle Ausgabe angezeigt): 5. Assemblerinhalt von ausführbaren Abschnitten mit der Option - d anzeigen. Betrachten Sie das folgende Beispiel. In diesem Ausgang werden die Assembler-Inhalte von ausführbaren Abschnitten (in der Objektdatei) angezeigt (Teilausgabe unten): 6. Assemblerinhalt aller Abschnitte mit der Option - D anzeigen Wenn der Assembler-Inhalt aller Abschnitte im Ausgang benötigt wird, Die Option - D kann verwendet werden. Betrachten Sie die folgende Ausgabe: So sehen wir, dass die relevante Ausgabe angezeigt wurde. Da war die Ausgabe sehr lang, also habe ich es abgeschnitten. Beachten Sie, dass ich den Pager-Befehl zum Steuern der Ausgabe verwendet habe. 7. Zeigen Sie den vollständigen Inhalt aller Abschnitte mit der Option - s an. Betrachten Sie folgendes Beispiel: So sehen wir, dass der gesamte Inhalt für alle Abschnitte in der Ausgabe angezeigt wurde. 8. Anzeigen von Debug-Informationen mithilfe der Option - g Betrachten Sie das folgende Beispiel: So sehen wir, dass alle verfügbaren Debug-Informationen in der Ausgabe gedruckt wurden. 9. Zeigen Sie den Inhalt der Symboltabelle (oder Tabellen) mit der Option - t an. Betrachten Sie folgendes Beispiel: So sehen wir, dass der Inhalt der Symboltabelle in der Ausgabe angezeigt wurde. 10. Zeigen Sie den Inhalt der dynamischen Symboltabelle mit der Option - T an. Dynamische Symbole sind diejenigen, die während der Laufzeit aufgelöst werden. Die mit diesen Symbolen verknüpften Informationen können mit der Option - D abgerufen werden. Betrachten wir das folgende Beispiel: So sehen wir, dass Informationen über dynamische Symbole in der Ausgabe angezeigt wurden. 11. Zeigen Sie die dynamischen Umsiedlung Einträge in der Datei mit - R Option Betrachten Sie das folgende Beispiel: So sehen wir, dass alle dynamischen Umzugseinträge in der Ausgabe angezeigt wurden. 12. Display-Bereich von Interesse mit - j Option Dies ist äußerst nützlich, wenn Sie wissen, die Abschnitt, in Bezug auf die die Informationen erforderlich ist. Die Option - j wird in diesem Fall verwendet. Betrachten wir das folgende Beispiel: So sehen wir, dass Informationen im Zusammenhang mit rodata Abschnitt oben angezeigt wurde. 13. Verwenden Sie das ältere Demontageformat mit der Option 8211prefix-Adressen. Das ältere Format druckt die komplette Adresse auf jeder Zeile. Betrachten wir das folgende Beispiel: So sehen wir, dass die komplette Adresse in der Ausgabe gedruckt wurde. 14. Akzeptieren von Eingabeoptionen aus einer Datei mit der Option Wenn Sie möchten, können die Optionen zu objdump aus einer Datei gelesen werden. Dies kann mit der Option 82168217 erfolgen. Betrachten Sie das folgende Beispiel: In diesem Beispiel oben habe ich die Optionen - v und - i verwendet. Während - v verwendet wird, um die Versionsinformationen zu drucken, wird - i verwendet, um unterstützte Objektformate und - architekturen bereitzustellen. Jetzt habe ich eine Datei erstellt und füge diese beiden Optionen dort hinzu. Führen Sie die objdump aus, indem Sie die Datei options. txt wie unten gezeigt aufrufen. Dies zeigt die gleiche Ausgabe wie oben, da es die Optionen aus der options. txt Datei. objdump (1) - Linux man Seite Beschreibung objdump zeigt Informationen über eine oder mehrere Objektdateien. Die Optionen steuern, welche besonderen Informationen angezeigt werden sollen. Diese Information ist vor allem für Programmierer nützlich, die an den Compilation-Tools arbeiten, im Gegensatz zu Programmierern, die einfach nur wollen, dass ihr Programm kompiliert und funktioniert. Objfile Sind die zu untersuchenden Objektdateien. Wenn Sie Archive angeben, zeigt objdump Informationen zu den einzelnen Objektobjektdateien an. Die langen und kurzen Formen der Optionen, die hier als Alternativen gezeigt werden, sind gleichwertig. Mindestens eine Option aus der Liste - a, - d, - D, - e, - f, - g, - G, - h, - H, - p, - r, - R, - s, - S, - T, - T, - V, - x muss gegeben werden. - a --archive-header Wenn eine der objfile-Dateien Archive sind, zeigen Sie die Archiv-Header-Informationen (in einem Format ähnlich ls - l) an. Neben den Informationen, die du mit ar tv auflisten kannst. Objdump - a zeigt das Objektdateiformat jedes Archivmitglieds an. --adjust-vma offset Wenn Sie Informationen abgeben, fügen Sie zuerst alle Abschnittsadressen hinzu. Dies ist sinnvoll, wenn die Abschnittsadressen nicht mit der Symboltabelle übereinstimmen, was beim Setzen von Abschnitten auf bestimmte Adressen bei der Verwendung eines Formats geschehen kann, das keine Abschnittsadressen wie a. out darstellen kann. - b bfdname --target bfdname Geben Sie an, dass das Objektcode-Format für die Objektdateien bfdname ist. Diese Option ist möglicherweise nicht erforderlich objdump kann viele Formate automatisch erkennen. Beispielsweise werden Zusammenfassungsinformationen aus den Abschnittsüberschriften (-h) von fu. o angezeigt. Die explizit (-m) als VAX-Objektdatei im Format von Oasys-Compilern identifiziert wird. Sie können die mit der Option - i verfügbaren Formate auflisten. - C - Demangle-Style Decode (Demangle) Low-Level-Symbolnamen in Benutzerebenennamen. Neben dem Entfernen des anfänglichen Unterstrichs, der vom System vorangestellt wird, ist das C-Funktionsnamen lesbar. Verschiedene Compiler haben unterschiedliche Mangling Styles. Das optionale Demangling-Stil-Argument kann verwendet werden, um einen geeigneten Demangling-Stil für Ihren Compiler zu wählen. - g --debugging Anzeige Debugging-Informationen anzeigen Dies versucht, die in der Datei gespeicherten STABS - und IEEE-Debugging-Formatinformationen zu analysieren und mit einer C-ähnlichen Syntax auszudrucken. Wenn keines dieser Formate gefunden wird, fällt diese Option auf die Option - W zurück, um alle DWARF-Informationen in der Datei zu drucken. - e-debugging-tags Wie - g. Aber die Informationen werden in einem Format erstellt, das mit dem ctags-Tool kompatibel ist. - d --disassemble Anzeige der Assembler-Mnemonik für die Maschinenbefehle von objfile. Diese Option zerlegt nur diejenigen Abschnitte, von denen erwartet wird, dass sie Anweisungen enthalten. - D --disassemble-all Wie - d. Aber zerlegen den Inhalt aller Abschnitte, nicht nur diejenigen, die Anweisungen enthalten. Wenn das Ziel eine ARM-Architektur ist, hat dieser Schalter auch die Wirkung, den Disassembler zu zwingen, Datenstücke zu entschlüsseln, die in Codeabschnitten gefunden wurden, als wären sie Anweisungen. --prefix-Adressen Bei der Demontage die gesamte Adresse auf jeder Zeile ausdrucken. Dies ist das ältere Demontageformat. - EB - EL --endian Geben Sie die Endianness der Objektdateien an. Dies betrifft nur die Demontage. Dies kann nützlich sein, wenn ein Dateiformat zerlegt wird, das keine Endianness-Informationen wie S-Datensätze beschreibt. - f - file-header Zeigt Zusammenfassungsinformationen aus dem gesamten Header jeder der objfile-Dateien an. - F - File-Offsets Beim Auseinandernehmen von Abschnitten, wann immer ein Symbol angezeigt wird, wird auch der Dateiappal des Datenbereichs angezeigt, der gedumpt werden soll. Wenn Nullen übersprungen werden, dann, wenn die Demontage wieder aufgenommen wird, sagen Sie dem Benutzer, wie viele Nullen übersprungen wurden, und der Dateiverfügung des Ortes, an dem die Demontage wieder aufgenommen wird. Wenn Sie Abschnitte ablegen, zeigen Sie den Dateiappal des Standorts an, an dem der Dump gestartet wird. --File-Start-Kontext Legen Sie fest, dass bei der Anzeige der interlisted-Quellcodedisassembly (vorausgesetzt - S-S) aus einer noch nicht angezeigten Datei den Kontext zum Anfang der Datei erweitert wird. - h --section-headers --headers Zeigt Zusammenfassungsinformationen aus den Abschnittsüberschriften der Objektdatei an. Dateisegmente können zu nicht standardisierten Adressen verlagert werden, zB mit dem - Ttext. - Daten. Oder - Tbss-Optionen auf ld. Allerdings speichern einige Objektdateiformate, wie zB a. out, die Startadresse der Dateisegmente nicht. In diesen Situationen, obwohl ld die Abschnitte korrekt verlegt, mit objdump - h, um die Datei-Abschnitt-Header aufzulisten, können die korrekten Adressen nicht angezeigt werden. Stattdessen werden die üblichen Adressen angezeigt, die für das Ziel implizit sind. - H - Help Drucken Sie eine Zusammenfassung der Optionen zu objdump und beenden. - i --info Zeigt eine Liste mit allen zur Verfügung stehenden Architekturen und Objektformaten mit - b oder - m an. - j name --section name Zeigt nur Informationen für den Abschnittsnamen an. - l-line-nummern Etikettieren Sie die Anzeige (mit Debugging-Informationen) mit dem Dateinamen und den Quellzeilennummern, die dem obigen Objektcode entsprechen, oder Relocs. Nur nützlich bei - d. - D Oder - r. - m machine --architecture machine Geben Sie die Architektur an, die bei der Demontage von Objektdateien verwendet werden soll. Dies kann nützlich sein, wenn Objektdateien zerlegt werden, die keine Architekturinformationen wie S-Datensätze beschreiben. Sie können die verfügbaren Architekturen mit der Option - i auflisten. Wenn das Ziel eine ARM-Architektur ist, hat dieser Schalter einen zusätzlichen Effekt. Es beschränkt die Demontage auf nur die Anweisungen, die von der von der Maschine angegebenen Architektur unterstützt werden. Wenn es notwendig ist, diesen Schalter zu verwenden, da die Eingabedatei keine architektonischen Informationen enthält, ist es aber auch erwünscht, alle Anweisungen zu verwenden. - M Optionen --disassembler-Optionen Optionen Übergeben Sie zielspezifische Informationen an den Disassembler. Nur auf einigen Zielen unterstützt. Wenn es notwendig ist, mehr als eine Disassembler-Option anzugeben, können mehrere - M-Optionen verwendet oder in eine durch Kommas getrennte Liste platziert werden. Wenn es sich bei dem Ziel um eine ARM-Architektur handelt, kann mit diesem Schalter ausgewählt werden, welcher Registernamensatz während des Disassemblers verwendet wird. Die Angabe von - M reg-names-std (die Voreinstellung) wählt die Registernamen, wie sie in der ARM s-Befehlssatzdokumentation verwendet werden, aber mit dem Register 13 mit dem Namen sp, Register 14, das lr genannt wird, und das Register 15 mit dem Namen pc. Die Angabe von - M reg-names-apcs wählt den Namenssatz aus, der vom ARM Procedure Call Standard verwendet wird, während - M reg-names-raw nur r verwendet wird, gefolgt von der Registernummer. Es gibt auch zwei Varianten auf dem APCS-Register Namensschema aktiviert von - M Reg-Namen-atpcs und - M Reg-Namen-Special-atpcs, die die ARMThumb Prozedur Call Standard Namenskonventionen verwenden. (Entweder mit den normalen Registernamen oder den speziellen Registernamen). Diese Option kann auch für ARM-Architekturen verwendet werden, um den Disassembler zu zwingen, alle Anweisungen als Thumb-Anweisungen zu interpretieren, indem man den Schalter --disassembler-optionsforce-thumb verwendet. Dies kann nützlich sein, wenn man versucht, den von anderen Compilern erzeugten Daumencode zu zerlegen. Für die x86, einige der Optionen duplizieren Funktionen der - m-Schalter, aber ermöglichen feinere körnige Kontrolle. Mehrere Selektionen aus den folgenden können als Komma getrennte Zeichenfolge angegeben werden. X86-64 I386 und i8086 wählen Sie die Demontage für die angegebene Architektur aus. Intel und Att wählen zwischen Intel-Syntax-Modus und ATampT-Syntax-Modus. Intel-Mnemotechnik und Att-Mnemonik wählen zwischen Intel-Mnemonik-Modus und ATampT-Mnemonik-Modus. Intel-Mnemonic impliziert intel und att-mnemonic impliziert att. Addr64 Addr32 Addr16 Data32 und data16 geben die Standardadressgröße und die Operandengröße an. Diese vier Optionen werden bei x86-64 überschrieben. I386 oder i8086 erscheinen später in der Optionszeichenfolge. Schließlich, Suffix. Wenn im ATampT-Modus der Disassembler anweist, ein mnemonisches Suffix zu drucken, auch wenn das Suffix von den Operanden abgeleitet werden könnte. Für PowerPC kontrolliert booke die Demontage von BookE-Anweisungen. 32 und 64 wählen Sie PowerPC und PowerPC64 Demontage. E300 wählt die Demontage für die e300-Familie aus. 440 wählt die Demontage für den PowerPC 440 aus. Ppcps wählt die Demontage für die gepaarten Einzelanweisungen des PPC750CL aus. Für MIPS. Diese Option steuert das Drucken von Anweisungen mnemonischen Namen und registriert Namen in zerlegten Anweisungen. Mehrere Selektionen aus dem folgenden können als Komma getrennte Zeichenfolge angegeben werden, und ungültige Optionen werden ignoriert: no-aliases Drucken Sie die rohe Instruktion mnemonic anstelle von einigen Pseudo-Anweisung mnemonic. I. e. Drucken daddu oder oder statt bewegen, sll anstelle von nop, etc. gpr-Namen ABI Drucken GPR (Allzweckregister) Namen, die für das angegebene ABI geeignet sind. Standardmäßig werden GPR-Namen entsprechend dem ABI der Binärdatei ausgewählt, die demontiert wird. Fpr-Namen ABI Drucken FPR (Gleitkomma-Register) Namen, die für das angegebene ABI geeignet sind. Standardmäßig werden FPR-Nummern anstelle von Namen gedruckt. Cp0-names ARCH Print CP0 (Systemsteuerung Coprozessor Coprozessor 0) Registernamen für die von ARCH angegebene CPU oder Architektur. Standardmäßig werden CP0-Registernamen entsprechend der Architektur und der CPU der Binärdatei ausgewählt, die demontiert wird. Hwr-names ARCH Drucken HWR (Hardware-Register, verwendet von der rdhwr-Anweisung) Namen, die für die von ARCH angegebene CPU oder Architektur geeignet sind. Standardmäßig werden die HWR-Namen entsprechend der Architektur und der CPU der Binärdatei ausgewählt, die demontiert wird. Reg-names ABI GPR - und FPR-Namen für den ausgewählten ABI ausgeben. Reg-names ARCH Print CPU-spezifische Registernamen (CP0-Register und HWR-Namen) für die ausgewählte CPU oder Architektur. Für irgendwelche der oben aufgeführten Optionen kann ABI oder ARCH als numerisch angegeben werden, um Zahlen anstelle von Namen, für die ausgewählten Registersorten zu drucken. Sie können die verfügbaren Werte von ABI und ARCH mit der Option --help auflisten. Für VAX. Sie können die Funktionseintragsadressen mit - M Eintrag angeben: 0xf00ba. Sie können diese mehrmals verwenden, um VAX-Binärdateien ordnungsgemäß zu zerlegen, die keine Symboltabellen enthalten (wie ROM-Dumps). In diesen Fällen würde die Funktionseintragsmaske ansonsten als VAX-Befehle decodiert, was vermutlich dazu führen würde, dass der Rest der Funktion falsch zerlegt wird. - p --private-header Drucken Sie Informationen, die für das Objektdateiformat spezifisch sind. Die genaue Information ist abhängig vom Objektdateiformat. Für einige Objektdateiformate werden keine zusätzlichen Informationen gedruckt. - r --reloc Drucken Sie die Umzugseinträge der Datei aus. Bei Verwendung mit - d oder - D. Die Verlagerungen werden mit der Demontage durchsetzt. - R --dynamic-reloc Drucken Sie die dynamischen Umzugseinträge der Datei. Dies ist nur für dynamische Objekte sinnvoll, wie zB bestimmte Arten von gemeinsamen Bibliotheken. Wie für - r. Wenn mit - d oder - D verwendet. Die Verlagerungen werden mit der Demontage durchsetzt. - s - full-Inhalt Zeigt den gesamten Inhalt der angeforderten Abschnitte an. Standardmäßig werden alle nicht leeren Abschnitte angezeigt. - S - Quelle Anzeige Quellcode mit Demontage vermischt, wenn möglich. Impliziert - d. - Präfix-Präfix Geben Sie Präfix an, um die absoluten Pfade hinzuzufügen, wenn Sie mit - S verwendet werden. --prefix-strip level Geben Sie an, wie viele erste Verzeichnisnamen die fest verdrahteten absoluten Pfade abstreifen. Es hat keine Wirkung ohne - Präfix-Präfix. --show-raw-insn Bei der Demontage von Anweisungen, drucken Sie die Anweisung in Hex sowie in symbolischer Form. Dies ist die Voreinstellung, außer wenn --prefix-Adressen verwendet werden. --no-show-raw-insn Bei der Demontage von Anweisungen nicht die Befehlsbytes ausdrucken. Dies ist die Voreinstellung, wenn --prefix-Adressen verwendet werden. - Inn-Breite Breite Anzeigen von Breiten-Bytes auf einer einzigen Zeile bei der Demontage von Anweisungen. - WlLiaprmfFsoR --Dwarfrawline, decodedline, info, abbrev, pubnamen, aranges, makro, frames, frames-interp, str, loc, Ranges Zeigt den Inhalt der Debug-Abschnitte in der Datei an, falls vorhanden. Wenn einer der optionalen Buchstaben oder Wörter dem Schalter folgt, werden nur Daten, die in diesen bestimmten Abschnitten gefunden werden, abgelegt. - G-Stabs Zeigt den vollständigen Inhalt der angeforderten Abschnitte an. Zeigen Sie den Inhalt der. stab - und. stab. index - und. stab. excl-Sektionen aus einer ELF-Datei an. Dies ist nur bei Systemen (wie Solaris 2.0) sinnvoll, bei denen. stab-Debugging-Symboltabelleneinträge in einem ELF-Abschnitt durchgeführt werden. In den meisten anderen Dateiformaten werden Debugging-Symboltabelleneinträge mit Verknüpfungssymbolen verschachtelt und sind in der Ausgabe von --syms sichtbar. - Adresse-Adresse Adresse Start der Anzeige von Daten an der angegebenen Adresse. Dies wirkt sich auf die Ausgabe der - d aus. - r und - s Optionen. - Stoppadresse Adresse Stoppen der Anzeige von Daten an der angegebenen Adresse. Dies wirkt sich auf die Ausgabe der - d aus. - r und - s Optionen. - t --Symen Drucken Sie die Symboltabelleneinträge der Datei aus. Dies ähnelt den vom nm-Programm bereitgestellten Informationen, obwohl das Anzeigeformat unterschiedlich ist. Das Format der Ausgabe hängt vom Format der Datei ab, die ausgegeben wird, aber es gibt zwei Haupttypen. Man sieht so aus: wo die Zahl innerhalb der eckigen Klammern die Nummer des Eintrags in der Symboltabelle ist, ist die Sekunde Zahl die Abschnittsnummer, der Fl-Wert sind die Symbole Flag-Bits, die ty-Nummer ist der Symboltyp, der Scl Zahl ist die Symbol-Speicherklasse und der nx-Wert ist die Anzahl der mit dem Symbol assoziierten Zusatzeinträge. Die letzten beiden Felder sind der Symbolwert und sein Name. Das andere gemeinsame Ausgabeformat, das in der Regel mit ELF-basierten Dateien zu sehen ist, sieht so aus: Hier ist die erste Zahl der Symbolwert (manchmal auch als Adresse bezeichnet). Das nächste Feld ist eigentlich ein Satz von Zeichen und Leerzeichen, die die Flag-Bits angeben, die auf dem Symbol gesetzt sind. Diese Zeichen werden unten beschrieben. Als nächstes ist der Abschnitt, mit dem das Symbol assoziiert ist, oder ABS, wenn der Abschnitt absolut ist (dh nicht mit irgendeinem Abschnitt verbunden ist) oder UND, wenn der Abschnitt in der Datei verwiesen wird, die entleert, aber nicht dort definiert ist. Nach dem Abschnitt Namen kommt ein anderes Feld, eine Zahl, die für gemeinsame Symbole ist die Ausrichtung und für andere Symbol ist die Größe. Schließlich wird der Symbolname angezeigt. Die Flaggenzeichen sind wie folgt in 7 Gruppen unterteilt: l Das Symbol ist ein lokales (l), global (g), eindeutig global (u), weder global noch lokal (ein Leerzeichen) oder sowohl global als auch lokal (). Ein Symbol kann aus einer Vielzahl von Gründen weder lokal noch global sein, z. B. Weil es für das Debugging verwendet wird, aber es ist wahrscheinlich ein Hinweis auf einen Fehler, wenn es jemals sowohl lokal als auch global ist. Einzigartige globale Symbole sind eine GNU-Erweiterung zum Standardsatz von ELF-Symbolbindungen. Für solch ein Symbol wird der dynamische Linker sicherstellen, dass im ganzen Prozess nur ein Symbol mit diesem Namen und Typ in Verwendung ist. Das Symbol ist schwach (w) oder stark (ein Leerzeichen). Das Symbol bezeichnet einen Konstruktor (C) oder ein gewöhnliches Symbol (ein Leerzeichen). Das Symbol ist eine Warnung (W) oder ein normales Symbol (ein Leerzeichen). Ein Warnsymbolname ist eine Meldung, die angezeigt werden soll, wenn das Symbol, das dem Warnsymbol folgt, immer referenziert wird.
No comments:
Post a Comment