2016-08-14 1 views
1

Ich möchte auf einem lokalen Etikett in NASM Assembly-Code mit GDB brechen.Brechen Sie am lokalen Etikett mit GDB für NASM-Assembly

die folgenden Befehl Ausbeuten die Ausgabe:

(gdb) break *start.label1 + 217 
    Attempt to extract a component of a value that is not a structure. 

Hier mein Code etwas geht:

global _start 
_start: 
... 
.label1: 
... 

Wie kann ich auf lokalen .label1 brechen?

+1

Um bei einem Label zu brechen, sollten Sie es nicht dereferenzieren 'b start.label1', genau wie' b main'. Vielleicht würde 'b (start.label1 + 217)' funktionieren. Bei einer Dereferenzierung benötigen Sie möglicherweise 'b * (start.label1 + 217) '. Aber IDK, wenn gdb '.' innerhalb von Symbolnamen unterstützt, was' nm' sagt, ist der tatsächliche Symbolname. Sie müssen möglicherweise "b * 0x ..." und kopieren Sie die Adresse. Entschuldigung, habe keine Zeit eine Antwort zu schreiben. –

+0

Vielen Dank für Ihre Vorschläge :) – Shuzheng

+1

Setzen Sie die Bezeichnung mit der Periode innerhalb von Hochkommas in den Ausdruck. Etwas wie 'b *' start.label1 '+ 217' –

Antwort

0

Zerlegen Sie die Funktion, in der Ihr lokales Etikett aufgerufen wird, wählen Sie die Adresse aus und fügen Sie wie üblich eine Pause hinzu, nicht den Namen des Etiketts. Sie können auch durch die Adresse für lokale Etiketten zerlegen.