记录一些ELF加载机制

PT_GNU_STACK

ELF Program Header中存在一个伪段GNU_STACK ,用于指示内核栈是否可执行,且会影响到其他段是否默认可执行(read implies exec,有R就视为RX)

该段并不实际加载,只有p_flags有效,且内核实现只关心X位,存在X栈就可执行,无X则不可执行,栈永远可读写,RW并不会真的影响栈是否可读写。

同时,内核会根据相应架构上的elf_read_implies_exec函数决定是否R就隐含了X

GNU_STACK默认所有R段可执行:x86 (32bit), arm, powerpc32,

GNU_STACK默认不可执行:x86_64, arm64,