Я только начинаю изучать ассемблер, и я прочитал в книге, что может быть выполнен только .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
вывод: привет мир
Итак, какие разделы действительно могут быть выполнены, а какие нет? И где я могу прочитать это, чтобы быть уверенным? Я довольно смущен в этот момент.
.data
сопоставляется с разрешением exec с вашим исходным кодом + поведением набора инструментов + версией ядра. - person Peter Cordes   schedule 28.02.2021