Die GDB-Flags „disassemble“ /m und /s funktionieren nicht, wenn der Adressbereich angegeben wirdC++

Programme in C++. Entwicklerforum
Anonymous
 Die GDB-Flags „disassemble“ /m und /s funktionieren nicht, wenn der Adressbereich angegeben wird

Post by Anonymous »

Ich möchte die Disassembly-Generierung mit GDB automatisieren und habe mich am Ende für die Disassembly-Funktion entschieden. Ich möchte es auch mit hinzugefügtem Quellcode ausdrucken, was mit den Befehlen /s oder /m erreicht werden kann. Idealerweise würde ich (

Code: Select all

0xFFFFFF
ist eine beliebige Zeilennummer, geht also durch die gesamte Datei):

Code: Select all

(gdb) disas /m 0,0xFFFFFF
Das erste Problem, auf das ich stoße, ist die Meldung „Kann nicht auf den Speicher an Adresse 0x4 zugreifen“, was umgangen werden kann, indem die Startadresse als 8 angegeben wird. Aber wenn ich es dann ausführe, werden nur Fließbänder ohne Quellcode angezeigt.
Für den Kontext führe ich die ARM-Version von GDB (obwohl nur GDB das gleiche Verhalten aufweist) auf einer Objektdatei aus, die aus einer C++-Datei kompiliert wurde. Zum Beispiel:

Code: Select all

arm-none-eabi-gdb --quiet build/L4/02_base/rtc.o -iex="set osabi none" -ex="set architecture armv4" -ex="set pagination off" -ex="set verbose off"
Die einzige „Lösung“, die ich gefunden habe, besteht darin, das allererste Symbol anzugeben, das in der Objektdatei vorhanden ist (das ist _ZL8int8_MAX für diese Datei):

Code: Select all

(gdb) disas /m _ZL8int8_MAX,+0xFFFFFF
Das Problem dabei ist, dass dies nicht automatisiert werden kann (und ehrlich gesagt funktioniert es nicht einmal oft).
Wie kann ich den GDB-Ausgabequellcode zusammen mit Assemblerzeilen erstellen, wenn ich einen Adressbereich spezifiziere?
BEARBEITEN:
Ich habe festgestellt, dass GDB eine Ausgabe für C-Code mit eingefügtem Code erzeugt (die STM-HAL-Bibliothek ist in C geschrieben) und daher ihre .c-Quelle zerlegt Dateien verfügen über Quellcode (kompiliert mit arm-none-eabi-gcc, gleichzeitig mit der Kompilierung des restlichen Codes). Allerdings ist unser Code in C++ geschrieben (und mit arm-none-eabi-g++ kompiliert) und es ist kein Quellcode in die Disassemblierung eingefügt. Es kann ein Problem sein oder auch nicht, ich muss mich später damit befassen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post