标题: execstack命令
http://scz.617.cn/unix/201204261850.txt
某些Linux发行版有一个execstack命令,比如在Debian上"aptitude install execstack"。
这个命令在操作、访问ELF文件"PT_GNU_STACK program header"的p_flags字段:
struct file struct elf_header struct program_header_table struct program_table_entry32_t program_table_element[i] (RW_) GNU_STACK enum p_type32_e p_type PT_GNU_STACK (0x6474E551) enum p_flags32_e p_flags PF_Read_Write (6) PF_None (0) PF_Exec (1) PF_Write (2) PF_Write_Exec (3) PF_Read (4) PF_Read_Exec (5) PF_Read_Write_Exec (7) struct section_header_table
-s
将PF_Exec置位,表示该ELF文件要求栈可执行。
-c
将PF_Exec复位,表示该ELF文件不要求栈可执行。
-q
检查PF_Exec的状态:
- 该ELF文件不要求栈可执行
X 该ELF文件要求栈可执行
? 未知,比如找不到"PT_GNU_STACK program header"
示例:
$ cp /bin/ls scz_ls $ execstack -q scz_ls
- scz_ls $ execstack -s scz_ls $ execstack -q scz_ls X scz_ls
支持栈不可执行的kernel和dynamic linker,在"PT_GNU_STACK program header"存 在的情况下,会尊重其p_flags的设置,以此控制栈区是否可执行。
当"PT_GNU_STACK program header"不存在时,应假设该ELF文件要求栈可执行。