Das Buch Assembly Language Schritt für Schritt bietet den folgenden Code als Sandbox:Wie erhalte ich mehr Informationen über einen Seg-Fehler?
section .data
section .text
global _start
_start:
nop
//insert sandbox code here
nop
Jedes Beispiel, das ich in dem Raum für Sandbox enthalten ist ein Segmentierungsfehler erzeugt wird. Zum Beispiel das Hinzufügen dieser Code:
mov ax, 067FEh
mov bx, ax
mov cl, bh
mov ch, bl
Dann Kompilieren mit:
nasm -f macho sandbox.asm
ld -o sandbox -e _start sandbox.o
schafft eine seg Fehler, wenn ich es auf meinem OS/X laufen. Gibt es eine Möglichkeit, mehr Informationen darüber zu erhalten, was den Segmentierungsfehler verursacht?
Das Ausführen unter einem Debugger wäre ein guter Anfang. In diesem Fall liegt der Grund für den Absturz wahrscheinlich darin, dass die CPU nach dem Ausführen des letzten NOP-Befehls in Ihrem Programm weiterhin ausführt, welche Befehle sich im Speicher befinden, die sich im Speicher befinden. –
Wenn ich es in einem Debugger starte, wird es automatisch mit einem Seg Fehler beendet. – Leahcim
Idealerweise würden Sie hoffen, dass sich das Verhalten Ihres Programms nicht ändert, wenn es unter einem Debugger ausgeführt wird. Es sollte Ihnen zumindest sagen, wo Ihr Programm abgestürzt ist und welcher Befehl den Absturz verursacht hat. –