Я изучаю ассемблер и обнаружил следующее удивительное. По сути, я скопировал какой-то код hello world откуда-то из Интернета.
section .text
global _start
_start:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80 ; interrupt for calling kernel
mov eax,1
int 0x80
section .data
msg db 'Hello, world!',0xa
len equ $ - msg
Я компилирую и связываю это с помощью nasm -f elf -g hellow.asm, ld hellow.o -o hellow. Если я сейчас загружу его в gdb, я смогу перечислить код и запустить его нормально. Если я поставлю точку останова на первую инструкцию mov, программа на этом не остановится. Запустив ndisasm (ndisasm -b32 hellow) в результирующем файле, я получаю (часть, которую я считаю актуальной):
0000007D 0000 add [eax],al
0000007F 00BA0E000000 add [edx+0xe],bh
00000085 B9A0900408 mov ecx,0x80490a0
0000008A BB01000000 mov ebx,0x1
0000008F B804000000 mov eax,0x4
00000094 CD80 int 0x80
00000096 B801000000 mov eax,0x1
0000009B CD80 int 0x80
Так и не появляется инструкция.
Я был бы очень признателен за подсказку о том, что происходит, или где можно узнать о том, что происходит.