From 190bb4e8633885f41348234162b61865b4d77541 Mon Sep 17 00:00:00 2001 From: Jason Hiser <jdhiser@gmail.com> Date: Fri, 8 Mar 2019 14:49:33 -0500 Subject: [PATCH] changed to support PSPATH env var. --- irdb-libs/thanos/thanos.cpp | 23 ++++++++++++-- set_env_vars | 32 ++++++++++---------- tools/ps_analyze.sh | 60 ++++++++++++++++++++++++------------- 3 files changed, 77 insertions(+), 38 deletions(-) diff --git a/irdb-libs/thanos/thanos.cpp b/irdb-libs/thanos/thanos.cpp index 84941d3ff..560adb3a4 100644 --- a/irdb-libs/thanos/thanos.cpp +++ b/irdb-libs/thanos/thanos.cpp @@ -29,6 +29,19 @@ bool redirect_opt=true; int new_stdout_fd=1; int new_stderr_fd=2; +static string getFileStem(const string& filePath) +{ + char* buff = new char[filePath.size()+1]; + strcpy(buff, filePath.c_str()); + string tmp = string(basename(buff)); + string::size_type i = tmp.rfind('.'); + if (i != string::npos) { + tmp = tmp.substr(0,i); + } + delete[] buff; + return tmp; +} + class ThanosPlugin_t { public: @@ -222,8 +235,10 @@ unique_ptr<ThanosPlugin_t> ThanosPlugin_t::pluginFactory(const string plugin_det } + int ThanosPlugin_t::runPlugin() { +#if 0 static const char *const base_path = getenv("SECURITY_TRANSFORMS_HOME"); if(base_path == NULL) { @@ -231,8 +246,9 @@ int ThanosPlugin_t::runPlugin() return -1; } static const auto plugin_path (string(base_path).append("/plugins_install/")); - - void *const dlhdl = dlopen((plugin_path+"lib"+step_name+".so").c_str(), RTLD_NOW); +#endif + const auto short_step_name = string(getFileStem(step_name).c_str()+3); + void *const dlhdl = dlopen(step_name.c_str(), RTLD_NOW); if(dlhdl == NULL) { const auto err=dlerror(); @@ -260,8 +276,9 @@ int ThanosPlugin_t::runPlugin() auto are_logging = !((bool) are_debugging); if(are_logging) { + // setup logging - auto logfile_path = "./logs/"+step_name+".log"; + auto logfile_path = "./logs/"+short_step_name+".log"; logfile=fopen(logfile_path.c_str(), "a+"); if(!logfile) { diff --git a/set_env_vars b/set_env_vars index 6a0b3165c..878a42bdc 100644 --- a/set_env_vars +++ b/set_env_vars @@ -1,27 +1,14 @@ -export PEASOUP_UMBRELLA_DIR=`pwd` -export PEASOUP_HOME=$PEASOUP_UMBRELLA_DIR +export PEASOUP_HOME=`pwd` export PEDI_HOME=$PEASOUP_HOME/pedi -export STRATAFIER_OBJCOPY=$PEASOUP_HOME/binutils-2.19/binutils/objcopy -export TOOLCHAIN=$PEASOUP_HOME/diablo_toolchain export SMPSA_HOME=$PEASOUP_HOME/SMPStaticAnalyzer -export STRATAFIER=$PEASOUP_HOME/stratafier export IDAROOT=$PEASOUP_HOME/idaproCur export IDASDK=$PEASOUP_HOME/idaproCur_sdk -export STRATA=$PEASOUP_HOME/strata -export STRATA_HOME=$STRATA -export STRATA32=$PEASOUP_HOME/strata32 -export STRATA_HOME32=$STRATA32 export ZIPR_HOME=$PEASOUP_HOME/zipr -export ZIPR_INSTALL=$PEASOUP_HOME/zipr_install -export ZIPR_CALLBACKS=$PEASOUP_HOME/zipr_callbacks export ZIPR_SDK=$PEASOUP_HOME/zipr-sdk -export ZIPR_SCFI_PLUGIN=$PEASOUP_HOME/zipr_scfi_plugin -export ZIPR_XEON_PLUGIN=$PEASOUP_HOME/zipr_xeon_plugin -export SECURITY_TRANSFORMS_HOME=$PEASOUP_HOME/irdb-libs export IRDB_SDK=$PEASOUP_HOME/irdb-sdk -export IRDB_TRANSFORMS=$PEASOUP_HOME/irdb_transforms export ZEST_RUNTIME=$PEASOUP_HOME/zest_runtime +export PSPATH=$PEASOUP_HOME/irdb-libs/plugins_install if [ -f manifest.txt ]; then if [ -f $PS_INSTALL ]; then @@ -39,3 +26,18 @@ source $PEASOUP_HOME/set_command_envs export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ZEST_RUNTIME/lib32:$ZEST_RUNTIME/lib64:$SECURITY_TRANSFORMS_HOME/lib" + +# deprecated: going away soon. +export SECURITY_TRANSFORMS_HOME=$PEASOUP_HOME/irdb-libs +export ZIPR_INSTALL=$PEASOUP_HOME/zipr_install +export PEASOUP_UMBRELLA_DIR=$PEASOUP_HOME + + +# already gone +#export STRATA_HOME=$STRATA +#export STRATA32=$PEASOUP_HOME/strata32 +#export STRATA=$PEASOUP_HOME/strata +#export STRATA_HOME32=$STRATA32 +#export TOOLCHAIN=$PEASOUP_HOME/diablo_toolchain +#export STRATAFIER_OBJCOPY=$PEASOUP_HOME/binutils-2.19/binutils/objcopy +#export STRATAFIER=$PEASOUP_HOME/stratafier diff --git a/tools/ps_analyze.sh b/tools/ps_analyze.sh index ab663d0d6..ebd57bd46 100755 --- a/tools/ps_analyze.sh +++ b/tools/ps_analyze.sh @@ -10,7 +10,7 @@ source $(dirname $0)/ps_wrapper.source $0 -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SECURITY_TRANSFORMS_HOME/lib +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PEASOUP_HOME/irdb-libs/lib realpath() { @@ -626,7 +626,7 @@ check_steps_completed() echo "*********************************************************" echo " Warning! Step requested, but not performed: $step_name " echo " (Could not find ${step_name}.exe nor lib${step_name}.so" - echo " in search path: $SECURITY_TRANSFORMS_HOME/plugins_install/)" + echo " in search path: ${PSPATH} " echo "*********************************************************" echo "*********************************************************" warnings=1 @@ -662,12 +662,12 @@ perform_step() if [ "$step" = "$stop_before_step" ]; then echo "ps_analyze has been asked to stop before step $step." - echo "command is: LD_LIBRARY_PATH=$SECURITY_TRANSFORMS_HOME/lib gdb --args $command" + echo "command is: LD_LIBRARY_PATH=$PEASOUP_HOME/irdb-libs/lib gdb --args $command" exit 1 fi if [ "$step" = "$dump_before_step" ]; then echo " ---- ps_analyze has been asked to dump before step $step." - $SECURITY_TRANSFORMS_HOME/plugins_install/dump_map.exe $cloneid > logs/dump_before.log + $PEASOUP_HOME/irdb-libs/plugins_install/dump_map.exe $cloneid > logs/dump_before.log fi is_step_on $step @@ -800,7 +800,7 @@ perform_step() fi if [ "$step" = "$dump_after_step" ]; then echo " ---- ps_analyze has been asked to dump after step $step." - $SECURITY_TRANSFORMS_HOME/plugins_install/dump_map.exe $cloneid > logs/dump_after.log + $PEASOUP_HOME/irdb-libs/plugins_install/dump_map.exe $cloneid > logs/dump_after.log fi return $command_exit } @@ -810,13 +810,34 @@ run_current_thanos_steps() # echo "Doing thanos steps: $thanos_plugins" # execute last block of thanos plugins if there are any left if [[ $thanos_plugins ]]; then - perform_step "$thanos_steps" none "$plugin_path/thanos.exe "$thanos_plugins"" + perform_step "$thanos_steps" none "$PEASOUP_HOME/irdb-libs/plugins_install/thanos.exe "$thanos_plugins"" thanos_plugins="" thanos_steps="" fi } +find_plugin() +{ + local plugin_name=$1 + + for i in ${PSPATH//:/ } + do + if [[ -x $i/lib$stepname.so ]]; then + echo "$i/lib$stepname.so" + return + elif [[ -x $i/$stepname.exe ]]; then + echo "$i/$stepname.exe" + return + elif [[ -x $i/$stepname.sh ]]; then + echo "$i/$stepname.sh" + return + fi + done + +} + + do_plugins() { @@ -856,11 +877,10 @@ do_plugins() this_step_options_name=step_options_$stepname value="${!this_step_options_name}" - plugin_path=$SECURITY_TRANSFORMS_HOME/plugins_install/ - + plugin_path=$(find_plugin $stepname) # first check if step can be invoked as a thanos plugin - if [ -x $plugin_path/lib$stepname.so ]; then + if [[ "$plugin_path" == *.so ]]; then # if this step is a stop before/after step, cleanup anything outstanding so we can do the one step special. if [[ $stepname == $stop_before_step ]] || [[ $stepname == $stop_after_step ]] || @@ -871,9 +891,9 @@ do_plugins() # add step to the block of contiguous thanos plugins stop_if_error $stepname if [[ $? -gt $error_threshold ]]; then - thanos_plugins="$thanos_plugins \"$stepname --step-args $cloneid $value\"" + thanos_plugins="$thanos_plugins \"$plugin_path --step-args $cloneid $value\"" else - thanos_plugins="$thanos_plugins \"$stepname -optional --step-args $cloneid $value\"" + thanos_plugins="$thanos_plugins \"$plugin_path -optional --step-args $cloneid $value\"" fi thanos_steps="$thanos_steps $stepname" @@ -896,16 +916,16 @@ do_plugins() fi # invoke .exe, or .sh as a plugin step - if [ -x $plugin_path/$stepname.exe ]; then - perform_step $stepname none $plugin_path/$stepname.exe $cloneid $value - elif [ -x $plugin_path/$stepname.sh ]; then - perform_step $stepname none $plugin_path/$stepname.sh $cloneid $value + if [[ "$plugin_path" == *.exe ]]; then + perform_step $stepname none $plugin_path $cloneid $value + elif [[ "$plugin_path" == *.sh ]]; then + perform_step $stepname none $plugin_path $cloneid $value else echo "*********************************************************" echo "*********************************************************" - echo " Warning! Step requested, but not performed: $stepname " - echo " (Could not find ${stepname}.exe nor lib${stepname}.so " - echo " in search path: $SECURITY_TRANSFORMS_HOME/plugins_install/)" + echo " Warning! Step requested, but not performed: $stepname " + echo " (Could not find ${stepname}.exe nor lib${stepname}.so " + echo " in search path: ${PSPATH}) " echo "*********************************************************" echo "*********************************************************" warnings=1 @@ -1053,7 +1073,7 @@ do_prefix_steps() # Running IDA Pro static analysis phase ... # perform_step meds_static mandatory $PEASOUP_HOME/tools/do_idapro.sh $name $step_options_meds_static - perform_step rida mandatory $SECURITY_TRANSFORMS_HOME/plugins_install/rida.exe ./a.ncexe ./a.ncexe.annot ./a.ncexe.infoannot ./a.ncexe.STARSxrefs $step_options_rida + perform_step rida mandatory $PEASOUP_HOME/irdb-libs/plugins_install/rida.exe ./a.ncexe ./a.ncexe.annot ./a.ncexe.infoannot ./a.ncexe.STARSxrefs $step_options_rida touch a.ncexe.annot cp a.ncexe.annot a.ncexe.annot.full @@ -1102,7 +1122,7 @@ main() # # Check for proper environment variables and files that are necessary to peasoupify a program. # - check_environ_vars PEASOUP_HOME SECURITY_TRANSFORMS_HOME + check_environ_vars PEASOUP_HOME # # finish argument parsing -- GitLab