Last active
March 10, 2021 21:19
-
-
Save aayla-secura/3665e777bcf6f6f29b54b3e7cd7a337f to your computer and use it in GitHub Desktop.
Show disassembly of given opcodes or assembly instructions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# See -h for help | |
INTERACTIVE=1 | |
READ_ARGS=() | |
NASM_ARGS=() | |
OBJDUMP_ARGS=() | |
# Determine if interactive or stdin is redirected from file/heredoc/command | |
# output/etc | |
read -t 0 _ | |
if [[ $? -eq 0 ]] ; then | |
INTERACTIVE=0 | |
READ_ARGS=(-t 0.1) | |
fi | |
function usage { | |
cat <<EOF | |
Usage "${BASH_SOURCE[0]}" [<options>] | |
Options: | |
-f FORMAT format, e.g. elf64 | |
-32 equivalent to -f elf32 | |
-64 equivalent to -f elf64 | |
-M SYNTAX syntax, e.g. intel | |
-m ARCH architecture, e.g. arm | |
Example: | |
"${BASH_SOURCE[0]}" -64 -M intel <<<'jmp rsp' | |
EOF | |
exit 1 | |
} | |
function disasm { | |
local basef="${1}" | |
nasm "${NASM_ARGS[@]}" "${basef}.nasm" -o "${basef}.o" || return $? | |
objdump --no-addresses -d -j .text "${OBJDUMP_ARGS[@]}" "${basef}.o" | \ | |
sed '1,/^<\.text>/{d};s/^\s*//' | |
rm "${basef}".o | |
} | |
function readin { | |
# return 0 if more input expected (i.e. interactive and enter was pressed), | |
# 1 otherwise | |
local basef=$(mktemp opcode_to_asm.XXXXXXXX) line rc=1 | |
while IFS= read "${READ_ARGS[@]}" -r -p '> ' line ; do | |
# quit on a blank line only in interactive mode | |
if [ "${INTERACTIVE}" -eq 1 -a -z "${line}" ] ; then | |
rc=0 | |
break | |
fi | |
echo -E "${line}" >> "${basef}.nasm" | |
done | |
if [ -f "${basef}.nasm" -a -s "${basef}.nasm" ] ; then | |
disasm "${basef}" | |
rm "${basef}".nasm | |
fi | |
return ${rc} | |
} | |
#################### | |
while [ $# -gt 0 ] ; do | |
case "${1}" in | |
-32|-64) | |
NASM_ARGS+=(-f "elf${1#-}") | |
shift | |
;; | |
-f) | |
NASM_ARGS+=("${1}" "${2}") | |
shift 2 | |
;; | |
-M|-m) | |
OBJDUMP_ARGS+=("${1}" "${2}") | |
shift 2 | |
;; | |
*) | |
usage | |
;; | |
esac | |
done | |
while readin ; do | |
: | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment