#! /bin/sh -e echo "1..1" env | sort | sed 's/^/# /' check_exe () { tid=$1 exe=$2 if ! [ -f $exe ]; then echo "ok $tid # skip executable not found"; return; fi objty=$(objdump -f $exe | sed -n '/^.*: *file format \(.*\)/s//\1/p') echo "# $exe object type $objty" case $objty in elf32-* | elf64-*) if f=$(objdump -p $exe | sed -n '/^ *STACK / { n; s/^.*flags *\([-rwx]*\).*/\1/p; }') then echo "# STACK segment flags $f" case $f in rw-) echo "ok $tid stack not executable" ;; rwx) echo "not ok $tid executable stack" ;; *) echo "not ok $tid unexpected stack-segment flags" ;; esac else echo "not ok $tid failed to find stack-segment flags" fi ;; pei-x86-64) if nm $exe | grep __enable_execute_stack; then echo "not ok $tid # found call to __enable_execute_stack" else echo "ok $tid # stack maybe not executable" fi ;; esac } check_exe 1 finally-test