#!/bin/bash function check_tool() { tool=$1 cmd=$2 a=`${cmd} 2>/dev/null` if [ ! $? -eq 0 ] ; then echo "${tool} is missing" exit 1 fi } function check_tools() { check_tool "readelf" "readelf --version" check_tool "objdump" "objdump --version" check_tool "c++filt" "c++filt --version" if [ ! -e ./vtable-dumper ] ; then check_tool "git" "git --version" check_tool "make" "make --version" check_tool "g++" "g++ --version" fi } TARGET=$1 target=`basename ${TARGET}` readelf_target="${target}.readelf" sections_target="${target}.sections" vtable_target="${target}.vtable" if [ ! -f "${TARGET}" ] ; then echo "$0 " exit 1 fi check_tools if [ ${TARGET} -nt ${readelf_target} ] ; then echo "Regenerating ${readelf_target}" readelf -sW ${TARGET}|c++filt > ${readelf_target} fi if [ ${TARGET} -nt ${sections_target} ] ; then echo "Regenerating ${sections_target}" readelf --sections ${TARGET}|c++filt > ${sections_target} fi VTABLE_ARG="-V ${vtable_target}" if [ ${TARGET} -nt ${vtable_target} ] ; then echo objdump -d ${TARGET} objdump -d ${TARGET} >/dev/null 2>&1 if [ ! $? -eq 0 ]; then echo "Unable to do objdump, maybe ${TARGET} is for another platform" VTABLE_ARG="" else if [ ! -e ./vtable-dumper/vtable-dumper ] ; then git clone https://github.com/soutade/vtable-dumper.git || exit 1 cd ./vtable-dumper make cd - fi if [ -x ./vtable-dumper/vtable-dumper ] ; then echo "Regenerating ${vtable_target}" ./vtable-dumper/vtable-dumper -demangled ${TARGET}|c++filt > ${vtable_target} else echo "./vtable-dumper not available" VTABLE_ARG="" fi fi fi ./SOAdvancedDissector.py -f ${TARGET} -S ${readelf_target} -s ${sections_target} ${VTABLE_ARG} -c