Tengo un sencillo programa de NASM que sólo invoca sys_exit
:programación NASM - `` int int0x80` frente 0x80`
segment .text
global _start
_start:
mov eax, 1 ; 1 is the system identifier for sys_exit
mov ebx, 0 ; exit code
int 0x80 ; interrupt to invoke the system call
La primera vez que escribí, he cometido un error y se olvidó el espacio entre int
y 0x80
:
int0x80
... pero el programa aún se compiló sin problemas.
[prompt]> nasm -f elf MyProgram.asm
[prompt]> ld -o MyProgram MyProgram.o
¡Me acabo de dar un error de segmentación cuando lo ejecuté!
[prompt]> ./MyProgram
Segmentation fault
Entonces, ¿qué hace este programa - el original que escribí, con el espacio faltante - hacer? ¿Qué significa int0x80
(sin espacio) en NASM?
segment .text
global _start
_start:
mov eax, 1
mov ebx, 0
int0x80 ; no space...
¿Qué pasa si 'int 0x80 'se llama después? –
@pst - ¡Buena idea! * lo intenta * Parece ejecutarse normalmente! Incluso si agrego una llamada al sistema 'sys_write' para que sea un programa de" Hello World "... es como si' int0x80' ni siquiera estuviera allí: O –
¿Quiere decir que el error de segmentación desaparece? – BoltClock