私の単純なプログラムのデータとスタックセグメントが実行可能であることに気づきました。/ proc / [pid] / mapsで見ましたが、簡単なコードで確認できました。
例えば:
; prog.asm
section .data
code: db 0xCC ;int3
section .text
global _start
_start:
jmp code
mov rax, 60 ; sys_exit
mov rdi, 0
syscall
それから
nasm -f elf64 prog.asm
ld -o prog prog.o
./prog
progにint3命令を実行させます。
Cで記述され、gccでビルドされたプログラムでは、データ、スタック、およびヒープが実行不可能です。それでは、アセンブリで記述されたプログラムの動作が異なるのはなぜですか。