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"
pushl %%esi
Re: pushl %%esi
Das mach ich in meinem Inline Assembler Code aber auch relativ oft, funktioniert problemlos. Gibts eine genauere Problembeschreibung?
Re: pushl %%esi
Ich bekomme einen Segmentation fault sobald ich das dazu schreibe
Re: pushl %%esi
Hat sich geklärt... ich habe mich vertan es lag nicht an pushl
Re: pushl %%esi
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.
Koennte fuer die folgenden Threadleser relevant sein.
Re: pushl %%esi
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)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?
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
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
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
Danke kbraden!
Sehr hilfreicher Post. Google konnte mir nicht weiterhelfen. So kann man's echt debuggen!
Sehr hilfreicher Post. Google konnte mir nicht weiterhelfen. So kann man's echt debuggen!
Mein Blog -> http://digital-adventures.de