Files

46 lines
949 B
Bash
Executable File

#!/bin/bash
SOURCE=/usr/include/asm/unistd_64.h
OUTPUT=./syscall_names.h
if [[ -f "$OUTPUT" ]]; then
rm -f $OUTPUT
fi
if [[ ! -f $SOURCE ]]; then
echo "[!] ${SOURCE} not found, are the kernel headers installed?"
exit 1;
fi
# === HEADER ===
LAST_LINE="$(cat ${SOURCE} | tail -n +4 | head -n -3 | tail -n 1)"
split=($LAST_LINE)
MAX_SYSC="${split[2]}"
echo "#define SYSCALL_MAX_ID ${MAX_SYSC}" >> $OUTPUT
# === BODY ===
echo "static const char * const _syscall_names[SYSCALL_MAX_ID + 1] = {" >> $OUTPUT
while IFS=' ' read -r DEF NAME ID; do
echo " [${ID}] = \"${NAME}\"," >> $OUTPUT
done < <(tail -n +4 $SOURCE | head -n -3)
echo "};" >> $OUTPUT
# === TAIL ===
cat >> "$OUTPUT" <<'EOF'
static inline const char *syscall_name(long nr)
{
if (nr < 0 || nr > SYSCALL_MAX_ID)
return "<unknown>";
const char *s = _syscall_names[nr];
return s ? s : "<unknown>";
}
EOF
echo "[!] generated 'syscall_name.h'"