Source code:
#!/usr/bin/env bash
if [[ $# -eq 0 ]]; then
echo "Usage: runasm [ ...]"
echo " - Assemble, link, and run multiple assembly files, then delete them."
echo " - Name of executable is the name of the first file without extension."
exit 1
fi
object_files=()
executable_file=${1%.*}
for assembly_file in "$@"; do
object_file="${assembly_file%.*}.o"
as "${assembly_file}" -o "${object_file}"
if [[ $? -ne 0 ]]; then
exit 1
fi
object_files+=("${object_file}")
done
ld "${object_files[@]}" -o "${executable_file}"
if [[ $? -ne 0 ]]; then
exit 1
fi
./"${executable_file}"
exit_code=$?
rm "${object_files[@]}" "${executable_file}" > /dev/null 2>&1
exit "${exit_code}"
Putting aside the misleading title…
Because this writes to and then runs an executable file with a known name, this script should never be used on a multiuser system in a directory where another user has write permissions. It is vulnerable to a timing attack where the attacker copies an executable they want run with your permissions between this script creating the file and running it.