#!/bin/bash
# petoasm:
# bash shell script to convert binary microsoft portable executable
# file format to intel style assembly mnemonic.
# author : sumadi <madiqq83@gmail.com
# revision 1: 4 may 2024:13:08:50
# revision 2: saturday 18 january 2025 16:30:00
# revision 3: wednesday 28 may 2025 21:00:00
IFS=$'\n'
error()
{
echo -en "[error $1]: " > "/dev/stderr";
case "$1" in
1) echo "must have 2 parameters" > "/dev/stderr";
echo -en "USAGE: $0 \"/dir/input-file.exe\" \"/dir/output-file.asm\"\n\n" >\
"/dev/stderr"
;;
2) echo "put input file in first parameter" > "/dev/stderr"
;;
3) echo "output file must empty" > "/dev/stderr"
;;
4) echo "why cannot create temporary directory ?"
;;
5) echo "horrible technical error ..." > "/dev/stderr"
break
;;
esac
exit "$1"
}
if [[ "$#" != "2" ]]; then
error 1;
fi
I=`realpath "$1"`
if ! [[ -s "$I" ]]; then
error 2;
fi
O=`realpath "$2"`
if [[ -s "$2" ]]; then
error 3;
fi
_PWD="$PWD";
WS=`mktemp -d`;
if ! cd "$WS"; then
error 4;
fi
echo "[START]: converting \"$1\" to \"$2\"" > "/dev/stderr";
if ! objdump -D -M intel,intel-mnemonic "$I" > 1 2> "/dev/null";
then
error 5;
fi
grep -v '^Disassembly of section' <1 >2;
grep -v '\...' 2 >1;
tr '\t' ' ' <1 >2;
tr -s ' ' <2 >1;
sed 's/^ //g' 1 >2;
sed 's/: / /g' <2 >1;
grep -v ^$ 1 >2;
cp 2 "$O";
rm 1 2;
cd "$_PWD";
rm -rf "$WS";
echo "[END]: converting \"$1\" to \"$2\"" > "/dev/stderr";
exit 0;