diff --git a/SConscript b/SConscript index 707f88f6979182ab60e83b7d4c29883d62a79802..ab9426e4d22f48250232fd26c416c9341bab943d 100644 --- a/SConscript +++ b/SConscript @@ -1,4 +1,5 @@ import os +import sys argenv=Environment() # command line options @@ -8,8 +9,8 @@ argenv.Replace(debugopt2=ARGUMENTS.get("debugopt2",0)) argenv.Replace(debugmem=ARGUMENTS.get("debugmem",0)) argenv.Replace(do_64bit_analysis=ARGUMENTS.get("do_64bit_analysis",1)) argenv.Replace(do_64bit_build=ARGUMENTS.get("do_64bit_build",2)) -argenv.Replace(build_ida=ARGUMENTS.get("build_ida",1)) -argenv.Replace(build_ida7=ARGUMENTS.get("build_ida7",0)) +argenv.Replace(build_ida=ARGUMENTS.get("build_ida",-1)) +argenv.Replace(build_ida7=ARGUMENTS.get("build_ida7",-1)) argenv.Replace(build_irdb=ARGUMENTS.get("build_irdb",1)) argenv.Replace(build_irdb_driver=ARGUMENTS.get("build_irdb_driver",0)) argenv.Replace(install=ARGUMENTS.get("install",1)) @@ -55,6 +56,46 @@ else: STARS_LDFLAGS="" STARS_LDPREFIX="" + +# sanity check default values for build_ida and build_ida7 +# -1 means "default" 0 means off, 1 means on. +# defaults are build_ida7=1, build_ida=0. +# build_ida=1 causes default build_ida7=0 +# cannot both be on. +# can both be off. + +# check both on for error` +if int(argenv['build_ida7']) == 1 and int(argenv['build_ida']) == 1: + print "Cannot set both build_ida7 and build_ida at the same time." + sys.exit(0) +#check both default +elif int(argenv['build_ida7']) == -1 and int(argenv['build_ida']) == -1: + argenv.Replace(build_ida7=ARGUMENTS.get("build_ida",0)) + argenv.Replace(build_ida7=ARGUMENTS.get("build_ida7",1)) +#check one off, one default +elif int(argenv['build_ida7']) == -1 and int(argenv['build_ida']) == 0: + argenv.Replace(build_ida7=ARGUMENTS.get("build_ida7",1)) +elif int(argenv['build_ida7']) == 0 and int(argenv['build_ida']) == -1: + argenv.Replace(build_ida7=ARGUMENTS.get("build_ida",0)) +# check one on, one default +elif int(argenv['build_ida7']) == -1 and int(argenv['build_ida']) == 1: + argenv.Replace(build_ida7=ARGUMENTS.get("build_ida7",0)) +elif int(argenv['build_ida7']) == 1 and int(argenv['build_ida']) == -1: + argenv.Replace(build_ida7=ARGUMENTS.get("build_ida",0)) +# check one on, one explicitly off +elif int(argenv['build_ida7']) == 0 and int(argenv['build_ida']) == 1: + ''' okay, nothing to do.''' +elif int(argenv['build_ida7']) == 1 and int(argenv['build_ida']) == 0: + ''' okay, nothing to do.''' +# check both explicitly off +elif int(argenv['build_ida7']) == 0 and int(argenv['build_ida']) == 0: + ''' okay, nothing to do.''' +# how can it be none of these? +else: + print "build_ida/build_ida7 set wildly. values are 0, 1 or left unset. (or, possibly internal error in build?)" + sys.exit(0) + + # STARS_LDFLAGS=" -lasan LD_PRELOAD=/usr/lib/gcc/x86_64-linux-gnu/5/libasan.so" if int(argenv['do_64bit_analysis']) == 1: @@ -68,7 +109,7 @@ if int(argenv['numeric_error_annots']) == 1: Export('argenv', 'STARS_CCFLAGS', 'STARS_LDFLAGS', 'STARS_LDPREFIX') -if int(argenv['build_ida']) == 1: +if int(argenv['build_ida']) == 1 or int(argenv['build_ida7']) == 1: if argenv['IDASDK'] is None: print 'Cannot proceed without IDASDK set.' exit(1) @@ -77,16 +118,6 @@ if int(argenv['build_ida']) == 1: print 'Cannot proceed without IDAROOT set.' exit(1) - print "Build IDA Plugin" - lib=SConscript('SConscript.ida', variant_dir='build_ida') - print "Done build IDA Plugin" - test=argenv.Command(target="./test.log", source=lib, action="IDAROOT=$IDAROOT SMPSA_HOME=$SMPSA_HOME $SMPSA_HOME/tests/scripts/make_baseline.sh 2>&1 |tee ./test.log") - argenv.Depends(test,lib) - ab=argenv.AlwaysBuild(test) - argenv.Default(ab) - - -if int(argenv['build_ida7']) == 1: if argenv['IDASDK'] is None: print 'Cannot proceed without IDASDK set.' exit(1) @@ -95,8 +126,12 @@ if int(argenv['build_ida7']) == 1: print 'Cannot proceed without IDAROOT set.' exit(1) - print "Build IDA 7.0+ Plugin" - lib=SConscript('SConscript.ida7', variant_dir='build_ida') + if int(argenv['build_ida']) == 1: + print "Build IDA Plugin" + lib=SConscript('SConscript.ida', variant_dir='build_ida') + elif int(argenv['build_ida7']) == 1: + print "Build IDA 7.0+ Plugin" + lib=SConscript('SConscript.ida7', variant_dir='build_ida') print "Done build IDA Plugin" test=argenv.Command(target="./test.log", source=lib, action="IDAROOT=$IDAROOT SMPSA_HOME=$SMPSA_HOME $SMPSA_HOME/tests/scripts/make_baseline.sh 2>&1 |tee ./test.log") argenv.Depends(test,lib) diff --git a/SMP-analyze.sh b/SMP-analyze.sh index bf529302a23bfd788cb2da735483a2f0a71a0274..365c5b9f60a04961c8fd2b2610995e1cefc6ead4 100755 --- a/SMP-analyze.sh +++ b/SMP-analyze.sh @@ -40,7 +40,7 @@ export STARS_OPTIONS=$@ # install plugin and IDC file in case the IDA distribitution isn't available # at build time. -for whole_file in $SMPSA_HOME/install/*plx* +for whole_file in $(ls $SMPSA_HOME/install/*plx* $SMPSA_HOME/install/*so) do file=$(basename $whole_file) if [ ! -e $IDAROOT/plugins/$file -o $SMPSA_HOME/install/$file -nt $IDAROOT/plugins/$file ]; then @@ -106,7 +106,7 @@ if [ $TVHEADLESS"X" != "X" ]; then $STRATA/tools/idaprod/idaprod_client $SMPSA_HOME $IDAROOT $PWD $STARS_ROOT_FILENAME `ulimit -t` echo did server IDA ;; - *idapro6* | *idaproCur*) + *idapro6*) echo "Trying TVHEADLESS IDA" TVHEADLESS=1 yes | LD_PRELOAD=$OVERRIDE_PLUGIN time ${IDAROOT}/$myidal -A -SSMP.idc -L${IDALOG} $STARS_OPTIONS $STARS_ROOT_FILENAME > $STARS_ROOT_FILENAME.idaoutput 2>&1 echo "Finished TVHEADLESS IDA" @@ -120,6 +120,11 @@ if [ $TVHEADLESS"X" != "X" ]; then fi ;; + *idapro7* | *idaproCur*) + myidal=idat64 + echo "Trying TVHEADLESS IDA" + TVHEADLESS=1 LD_PRELOAD=$OVERRIDE_PLUGIN time ${IDAROOT}/$myidal -A -SSMP.idc -L${IDALOG} $STARS_OPTIONS -OSMPStaticAnalyzer:Reduced $STARS_ROOT_FILENAME > $STARS_ROOT_FILENAME.idaoutput 2>&1 + ;; *) echo Cannot determine idapro version: $IDAROOT