Objdump Demontage Arm Binär Optionen


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: 30objdump (1) - Linux man page Beschreibung objdump zeigt Informationen über eine oder mehrere Objektdateien an. 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, die gedruckt wird, hängt vom Objektdateiformat ab. 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. Linux Objdump Befehlsbeispiele (Zerlegen einer Binärdatei) Objdump-Befehl in Linux wird verwendet, um gründliche Informationen über Objektdateien bereitzustellen. 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 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, - 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, zeigt objdump - a 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. Zeigt Zusammenfassungsinformationen aus den Abschnittsüberschriften (-h) von fu. o an. 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. Siehe Zielauswahl. für mehr Informationen. - 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. Siehe cfilt. Für mehr Informationen über das Abwickeln. - 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. Diese Option hat auch einen subtilen Effekt auf die Demontage von Anweisungen in Codeabschnitten. Wenn die Option - d in Wirklichkeit ist, wird objdump davon ausgehen, dass alle Symbole, die in einem Codeabschnitt vorhanden sind, an der Grenze zwischen den Anweisungen auftreten, und es wird sich weigern, über eine solche Grenze zu zerlegen. Wenn die Option - D in Wirklichkeit ist, wird diese Annahme jedoch unterdrückt. Dies bedeutet, dass es möglich ist, dass die Ausgabe von - d und - D unterschiedlich ist, wenn beispielsweise Daten in Codeabschnitten gespeichert sind. 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. Beachten Sie, in einigen Fällen ist es möglich, dass ein Abschnitt sowohl die READONLY - als auch die NOREAD-Attribute gesetzt hat. In solchen Fällen hat das NOREAD-Attribut Vorrang, aber objdump wird beide berichten, da die genaue Einstellung der Flag-Bits wichtig sein könnte. - 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 ARMs-Befehlssatzdokumentation verwendet werden, aber mit dem Register 13 mit dem Namen sp, Register 14 mit dem Namen lr und dem Register 15, das als pc bezeichnet wird. 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 i8086 Wählen Sie die Demontage für die angegebene Architektur aus. Intel att Wählen Sie zwischen dem Intel-Syntax-Modus und dem ATampT-Syntax-Modus. Amd64 intel64 Wählen Sie zwischen AMD64 ISA und Intel64 ISA. Intel-mnemonic att-mnemonic Wählen Sie zwischen intel mnemonic mode und ATampT mnemonic mode. Anmerkung: Intel-Mnemonic impliziert intel und att-mnemonic impliziert att. Addr64 addr32 addr16 data32 data16 Geben Sie die Standardadresse Größe und die Operandengröße an. Diese vier Optionen werden bei x86-64 überschrieben. I386 oder i8086 erscheinen später in der Optionszeichenfolge. Suffix Im ATampT-Modus weist der Disassembler an, 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 steuert diese Option das Drucken von Befehls-Mnemonikamen und Registernamen 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. msa Demontage MSA Anweisungen. Virt Die Virtualisierungs-ASE-Anweisungen auseinanderbauen. Xpa Demontieren Sie die ASA-Anweisungen der eXtended Physical Address (XPA). Gpr-Namen ABI Drucken GPR (Allzweckregister) Namen, die für das angegebene ABI geeignet sind. By default, GPR names are selected according to the ABI of the binary being disassembled. fpr-names ABI Print FPR (floating-point register) names as appropriate for the specified ABI. By default, FPR numbers are printed rather than names. cp0-names ARCH Print CP0 (system control coprocessor coprocessor 0) register names as appropriate for the CPU or architecture specified by ARCH. By default, CP0 register names are selected according to the architecture and CPU of the binary being disassembled. hwr-names ARCH Print HWR (hardware register, used by the rdhwr instruction) names as appropriate for the CPU or architecture specified by ARCH. By default, HWR names are selected according to the architecture and CPU of the binary being disassembled. reg-names ABI Print GPR and FPR names as appropriate for the selected ABI. reg-names ARCH Print CPU-specific register names (CP0 register and HWR names) as appropriate for the selected CPU or architecture. For any of the options listed above, ABI or ARCH may be specified as numeric to have numbers printed rather than names, for the selected types of registers. You can list the available values of ABI and ARCH using the --help option. For VAX, you can specify function entry addresses with - M entry:0xf00ba. You can use this multiple times to properly disassemble VAX binary files that dont contain symbol tables (like ROM dumps). In these cases, the function entry mask would otherwise be decoded as VAX instructions, which would probably lead the rest of the function being wrongly disassembled. - p --private-headers Print information that is specific to the object file format. The exact information printed depends upon the object file format. For some object file formats, no additional information is printed. - P options --private options Print information that is specific to the object file format. The argument options is a comma separated list that depends on the format (the lists of options is displayed with the help). For XCOFF, the available options are: header aout sections syms relocs lineno, loader except typchk traceback toc ldinfo Not all object formats support this option. In particular the ELF format does not use it. - r --reloc Print the relocation entries of the file. If used with - d or - D. the relocations are printed interspersed with the disassembly. - R --dynamic-reloc Print the dynamic relocation entries of the file. This is only meaningful for dynamic objects, such as certain types of shared libraries. As for - r. if used with - d or - D. the relocations are printed interspersed with the disassembly. - s --full-contents Display the full contents of any sections requested. By default all non-empty sections are displayed. - S --source Display source code intermixed with disassembly, if possible. Implies - d. --prefix prefix Specify prefix to add to the absolute paths when used with - S. --prefix-strip level Indicate how many initial directory names to strip off the hardwired absolute paths. It has no effect without --prefix prefix. --show-raw-insn When disassembling instructions, print the instruction in hex as well as in symbolic form. This is the default except when --prefix-addresses is used. --no-show-raw-insn When disassembling instructions, do not print the instruction bytes. This is the default when --prefix-addresses is used. --insn-width width Display width bytes on a single line when disassembling instructions. - WlLiaprmfFsoRt --dwarfrawline, decodedline, info, abbrev, pubnames --dwarfaranges, macro, frames, frames-interp, str, loc --dwarfRanges, pubtypes, traceinfo, traceabbrev --dwarftracearanges, gdbindex Displays the contents of the debug sections in the file, if any are present. If one of the optional letters or words follows the switch then only data found in those specific sections will be dumped. Note that there is no single letter option to display the content of trace sections or. gdbindex. Note: the output from the info option can also be affected by the options --dwarf-depth. the --dwarf-start and the --dwarf-check. --dwarf-depth n Limit the dump of the. debuginfo section to n children. This is only useful with --dwarfinfo. The default is to print all DIEs the special value 0 for n will also have this effect. With a non-zero value for n. DIEs at or deeper than n levels will not be printed. The range for n is zero-based. --dwarf-start n Print only DIEs beginning with the DIE numbered n. This is only useful with --dwarfinfo. If specified, this option will suppress printing of any header information and all DIEs before the DIE numbered n. Only siblings and children of the specified DIE will be printed. This can be used in conjunction with --dwarf-depth. --dwarf-check Enable additional checks for consistency of Dwarf information. - G --stabs Display the full contents of any sections requested. Display the contents of the. stab and. stab. index and. stab. excl sections from an ELF file. This is only useful on systems (such as Solaris 2.0) in which. stab debugging symbol-table entries are carried in an ELF section. In most other file formats, debugging symbol-table entries are interleaved with linkage symbols, and are visible in the --syms output. --start-address address Start displaying data at the specified address. This affects the output of the - d. - r and - s options. --stop-address address Stop displaying data at the specified address. This affects the output of the - d. - r and - s options. - t --syms Print the symbol table entries of the file. This is similar to the information provided by the nm program, although the display format is different. The format of the output depends upon the format of the file being dumped, but there are two main types. One looks like this: where the number inside the square brackets is the number of the entry in the symbol table, the sec number is the section number, the fl value are the symbols flag bits, the ty number is the symbols type, the scl number is the symbols storage class and the nx value is the number of auxilary entries associated with the symbol. The last two fields are the symbols value and its name. The other common output format, usually seen with ELF based files, looks like this: Here the first number is the symbols value (sometimes refered to as its address). The next field is actually a set of characters and spaces indicating the flag bits that are set on the symbol. These characters are described below. Next is the section with which the symbol is associated or ABS if the section is absolute (ie not connected with any section), or UND if the section is referenced in the file being dumped, but not defined there. After the section name comes another field, a number, which for common symbols is the alignment and for other symbol is the size. Finally the symbols name is displayed. The flag characters are divided into 7 groups as follows: l g u. The symbol is a local (l), global (g), unique global (u), neither global nor local (a space) or both global and local (). A symbol can be neither local or global for a variety of reasons, e. g. because it is used for debugging, but it is probably an indication of a bug if it is ever both local and global. Unique global symbols are a GNU extension to the standard set of ELF symbol bindings. For such a symbol the dynamic linker will make sure that in the entire process there is just one symbol with this name and type in use. w The symbol is weak (w) or strong (a space). C The symbol denotes a constructor (C) or an ordinary symbol (a space). W The symbol is a warning (W) or a normal symbol (a space). A warning symbols name is a message to be displayed if the symbol following the warning symbol is ever referenced. I i The symbol is an indirect reference to another symbol (I), a function to be evaluated during reloc processing (i) or a normal symbol (a space). d D The symbol is a debugging symbol (d) or a dynamic symbol (D) or a normal symbol (a space). F f O The symbol is the name of a function (F) or a file (f) or an object (O) or just a normal symbol (a space). - T --dynamic-syms Print the dynamic symbol table entries of the file. This is only meaningful for dynamic objects, such as certain types of shared libraries. This is similar to the information provided by the nm program when given the - D ( --dynamic ) option. --special-syms When displaying symbols include those which the target considers to be special in some way and which would not normally be of interest to the user. - V --version Print the version number of objdump and exit. - x --all-headers Display all available header information, including the symbol table and relocation entries. Using - x is equivalent to specifying all of - a - f - h - p - r - t. - w --wide Format some lines for output devices that have more than 80 columns. Also do not truncate symbol names when they are displayed. - z --disassemble-zeroes Normally the disassembly output will skip blocks of zeroes. This option directs the disassembler to disassemble those blocks, just like any other data.

Comments