【发布时间】:2011-12-13 08:58:48
【问题描述】:
我刚刚注意到我的简单程序的数据和堆栈段是可执行的。 我在/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 构建的程序的数据、堆栈和堆是不可执行的,那么为什么用汇编编写的程序的行为方式不同呢?
【问题讨论】:
标签: linux assembly nasm memory-mapping