¿Por qué los datos y los segmentos de pila son ejecutables?
Acabo de notar que mi programa simple tiene sus datos y segmentos de pila ejecutables. Lo vi en / proc / [pid] / maps, y un código simple lo confirmó.
Por ejemplo
; prog.asm
section .data
code: db 0xCC ;int3
section .text
global _start
_start:
jmp code
mov rax, 60 ; sys_exit
mov rdi, 0
syscall
lueg
nasm -f elf64 prog.asm
ld -o prog prog.o
./prog
hace que prog ejecute la instrucción int3.
Los programas escritos en C y construidos con gcc tienen sus datos, pila y montón no ejecutables, entonces, ¿por qué los escritos en el ensamblaje se comportan de manera diferente?