Почему мне разрешено выполнять инструкции в разделе .data? (Linux, сборка NASM x86)

Я только начинаю изучать ассемблер, и я прочитал в книге, что может быть выполнен только .text раздел. Так почему же мне разрешено выполнять инструкции, хранящиеся в разделе .data? Вот код:

global _start

section .data
msg: db "hello world",10
msg_len: equ $-msg

proc_write_and_exit:
        mov eax, 4      ;write syscall
        mov ebx, 1      ;stdout handle number
        mov ecx, msg
        mov edx, msg_len
        int 80h         ;call program interrupt

        mov eax, 1      ;_exit syscall
        mov ebx, 0      ;program exit code
        int 80h

section .text
_start: jmp proc_write_and_exit

Работает на Ubuntu 18.04.4 LTS.

сборка: nasm -f elf execute_data_section.asm && ld -m elf_i386 execute_data_section.o

запустить: ./a.out

вывод: привет мир

Итак, какие разделы действительно могут быть выполнены, а какие нет? И где я могу прочитать это, чтобы быть уверенным? Я довольно смущен в этот момент.


person Vadim    schedule 28.02.2021    source источник
comment
Интересный вопрос, но, к сожалению, не новый. Посмотрите связанные дубликаты, чтобы узнать, почему .data сопоставляется с разрешением exec с вашим исходным кодом + поведением набора инструментов + версией ядра.   -  person Peter Cordes    schedule 28.02.2021