标题: execstack命令 https://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文件要求栈可执行。