blob: 2f562afa7d79b4d279dbbafe8c370c732a95652a [file] [log] [blame] [edit]
#!/bin/bash
# Split the file name into path and base name
path=$(dirname $1)
base=$(basename $1)
# Get the first 4 bytes from the file (which is the length of the program)
input="$(xxd -p -l 4 $1)"
# Convert from little endian
input="${input:6:2}${input:4:2}${input:2:2}${input:0:2}"
# Convert input from hex string to value
length=$((16#$input))
# Extract the hash part from the file name
hash=$(echo $base | cut -d'-' -f2-)
# Copy the program to a file named program-$hash
echo "Extracting program-$hash..."
dd if=$1 of=$path/program-$hash bs=1 skip=4 count=$length 2> /dev/null
echo "Extracting memory-$hash..."
# Copy the rest to a file named memory-$hash
dd if=$1 of=$path/memory-$hash bs=1 skip=$((4 + $length)) 2> /dev/null
echo "Disassembling program-$hash..."
# Unassembly program using bin/ubpf-disassembler
bin/ubpf-disassembler $path/program-$hash > $path/program-$hash.asm
echo "Program size: $(stat -c %s $path/program-$hash)"
echo "Memory size: $(stat -c %s $path/memory-$hash)"
echo "Disassembled program:"
cat $path/program-$hash.asm
echo "Memory contents:"
xxd $path/memory-$hash