46 lines
949 B
Bash
Executable File
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'"
|