Seite 1 von 1

pushl %%esi

Verfasst: 29. Nov 2011 17:30
von ut53xuco
wieso funktioniert das hier nicht?

"pushl %%esi\n"

Ich will esi und edi sichern damit ich sie später schneller zurücksetzten kann mit "popl %%esi\n"

Re: pushl %%esi

Verfasst: 29. Nov 2011 17:37
von skY
Das mach ich in meinem Inline Assembler Code aber auch relativ oft, funktioniert problemlos. Gibts eine genauere Problembeschreibung?

Re: pushl %%esi

Verfasst: 29. Nov 2011 18:24
von ut53xuco
Ich bekomme einen Segmentation fault sobald ich das dazu schreibe

Re: pushl %%esi

Verfasst: 29. Nov 2011 19:07
von ut53xuco
Hat sich geklärt... ich habe mich vertan es lag nicht an pushl

Re: pushl %%esi

Verfasst: 29. Nov 2011 20:24
von mw1039
War das Problem, dass der Compiler bei einem Inline-Assembler-Block nicht angeben kann, in welcher Zeile genau der Fehler vorliegt und stattdessen einfach nur die erste Zeile des Blocks oder so aehnlich angibt?

Koennte fuer die folgenden Threadleser relevant sein.

Re: pushl %%esi

Verfasst: 30. Nov 2011 06:05
von core
mw1039 hat geschrieben:War das Problem, dass der Compiler bei einem Inline-Assembler-Block nicht angeben kann, in welcher Zeile genau der Fehler vorliegt und stattdessen einfach nur die erste Zeile des Blocks oder so aehnlich angibt?
Wenn ich bei meinem Code versucht habe Segmentation Faults im Debugger (gdb) zu analysieren, wurde als Zeilenangabe jeweils die letzte Zeile des asm-Blocks gegeben. (Also die, mit dem abschließenden Semikolon)

Allgemeine Frage:
gibt es überhaupt *irgendeine* Möglichkeit, Inline-Assembler sinnvoll zu debuggen? Bzw., was ist den hierbei quasi die "best practice"?

Viele Grüße
core

Re: pushl %%esi

Verfasst: 30. Nov 2011 13:36
von kbraden
Weiss nicht ob das best-practice ist:

per "Ctrl-X gefolgt von a" den TUI Modus starten, dann per "layout asm" gefolgt von "layout regs" die Assembler/Register-Anzeige holen (du bist dann halt nicht mehr auf File-Ebene -> d.h. du siehst auch bei C-Code den generierten Assembler-Code).

Mittels "tui reg next" kannst du die Registerklassen aendern (fuer SSE beispielsweise - da steht aber z.t. quatsch drin! Ich hab mir immer die 16 * ints angeschaut statt den 4 * float).

Mit "stepi" oder "nexti" kann man durch Instruktionen steppen.

Mit "p $eax" kann man Register ausgeben, mit "x/x $esi" kann man Speicher an bestimmten Adressen inspizieren.

Mehr habe ich nicht gebraucht.

LG

Re: pushl %%esi

Verfasst: 30. Nov 2011 15:45
von jokke
Danke kbraden!

Sehr hilfreicher Post. Google konnte mir nicht weiterhelfen. So kann man's echt debuggen!