From 3c66cf4c13858f3ceabb2372036f75614236830a Mon Sep 17 00:00:00 2001 From: jdh8d <jdh8d@git.zephyr-software.com> Date: Mon, 21 Sep 2015 01:45:36 +0000 Subject: [PATCH] Updates to supportr building a libstars.a to link into IRDB xforms. Former-commit-id: 7ecc43186ebacb853a9bf5cb1c9740255e69dbe2 --- .gitattributes | 6 +- SConscript | 7 ++- SConscript.irdb => SConscript.irdb_driver | 23 +++---- SConscript.irdb_lib | 64 ++++++++++++++++++++ include/stars.h | 34 +++++++++++ src/base/SMPFunction.cpp | 2 +- src/drivers/irdb/stars_driver.cpp | 5 +- src/drivers/{irdb => library}/stars_irdb.cpp | 6 +- 8 files changed, 124 insertions(+), 23 deletions(-) rename SConscript.irdb => SConscript.irdb_driver (77%) create mode 100644 SConscript.irdb_lib create mode 100644 include/stars.h rename src/drivers/{irdb => library}/stars_irdb.cpp (97%) diff --git a/.gitattributes b/.gitattributes index 15aee791..1381bb90 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,7 +4,8 @@ /README.txt -text /SConscript -text /SConscript.ida -text -/SConscript.irdb -text +/SConscript.irdb_driver -text +/SConscript.irdb_lib -text /SConstruct -text /SMP-analyze.sh -text /config.guess -text @@ -43,6 +44,7 @@ include/interfaces/irdb/STARSOp.h -text include/interfaces/irdb/STARSProgram.h -text include/interfaces/irdb/STARSSSAInstruction.h -text include/interfaces/irdb/STARSSegment.h -text +include/stars.h -text /install-sh -text lib/Makefile.in -text lib/idapro/Makefile.in -text @@ -66,8 +68,8 @@ src/drivers/idapro/Makefile.in -text src/drivers/idapro/SMPStaticAnalyzer.cpp -text src/drivers/irdb/Makefile.in -text src/drivers/irdb/stars_driver.cpp -text -src/drivers/irdb/stars_irdb.cpp -text src/drivers/irdb/stars_irdb.hpp -text +src/drivers/library/stars_irdb.cpp -text src/interfaces/Makefile.in -text src/interfaces/abstract/Makefile.in -text src/interfaces/abstract/STARSInstruction.cpp -text diff --git a/SConscript b/SConscript index 739f8f4f..6113d35f 100644 --- a/SConscript +++ b/SConscript @@ -7,6 +7,7 @@ argenv.Replace(do_64bit_analysis=ARGUMENTS.get("do_64bit_analysis",1)) argenv.Replace(do_64bit_build=ARGUMENTS.get("do_64bit_build",0)) argenv.Replace(build_ida=ARGUMENTS.get("build_ida",1)) argenv.Replace(build_irdb=ARGUMENTS.get("build_irdb",0)) +argenv.Replace(build_irdb_driver=ARGUMENTS.get("build_irdb_driver",0)) argenv.Replace(install=ARGUMENTS.get("install",1)) # environment options @@ -44,8 +45,10 @@ Export('argenv', 'STARS_CCFLAGS') if int(argenv['build_ida']) == 1: lib=SConscript('SConscript.ida', variant_dir='build_ida') -if int(argenv['build_irdb']) == 1: - lib=SConscript('SConscript.irdb', variant_dir='build_irdb') +if int(argenv['build_irdb']) == 1 or int(argenv['build_irdb_driver']) == 1: + lib=SConscript('SConscript.irdb_lib', variant_dir='build_irdb_lib') +if int(argenv['build_irdb_driver']) == 1: + lib=SConscript('SConscript.irdb_driver', variant_dir='build_irdb_driver') Default(lib) diff --git a/SConscript.irdb b/SConscript.irdb_driver similarity index 77% rename from SConscript.irdb rename to SConscript.irdb_driver index e97b48b7..ad8b3658 100644 --- a/SConscript.irdb +++ b/SConscript.irdb_driver @@ -5,14 +5,10 @@ Import('argenv', 'STARS_CCFLAGS') -dirs=''' - src/base - src/interfaces - src/interfaces/abstract - src/interfaces/irdb +driverdirs=''' src/drivers/irdb - ''' -dirs=Split(dirs) + ''' +driverdirs=Split(driverdirs) cpppath=''' @@ -32,7 +28,7 @@ IRDB_CCFLAGS=''' -std=c++0x \ '''+STARS_CCFLAGS+" " IRDB_LIBPATH="$SECURITY_TRANSFORMS_HOME/lib $SECURITY_TRANSFORMS_HOME/beaengine/lib/Linux.gnu.Debug " -LIBS="IRDB-core IRDB-cfg pqxx BeaEngine_s_d MEDSannotation pq IRDB-util" +LIBS="stars IRDB-core IRDB-cfg pqxx BeaEngine_s_d MEDSannotation pq IRDB-util" IRDB_LDFLAGS=" " @@ -46,11 +42,9 @@ else: -# find files -#print 'dirs: ',dirs -files=[] -for dir in dirs: - files=files+Glob(os.path.join(dir,"*.cpp")) +driverfiles=[] +for dir in driverdirs: + driverfiles=driverfiles+Glob(os.path.join(dir,"*.cpp")) #setup the environment irdbenv=argenv.Clone(CCFLAGS=IRDB_CCFLAGS, LINKFLAGS=IRDB_LDFLAGS, CPPPATH=Split(cpppath)); @@ -64,8 +58,7 @@ env['build_tools']=0 Export('env') # for security_transforms. SConscript(sectrans_sconscript, variant_dir='scons_build_irdb_libs') -# build the program -pgm=irdbenv.Program('SMPStaticAnalyzer.exe', files, LIBPATH=Split(IRDB_LIBPATH), LIBS=Split(LIBS)) +pgm=irdbenv.Program('SMPStaticAnalyzer.exe', driverfiles, LIBPATH=Split(IRDB_LIBPATH), LIBS=Split(LIBS)) install=argenv.Install("$SECURITY_TRANSFORMS_HOME/plugins_install/", pgm) Default(install) diff --git a/SConscript.irdb_lib b/SConscript.irdb_lib new file mode 100644 index 00000000..7a516952 --- /dev/null +++ b/SConscript.irdb_lib @@ -0,0 +1,64 @@ +import os + +Import('argenv', 'STARS_CCFLAGS') + + + + +libdirs=''' + src/base + src/interfaces + src/interfaces/abstract + src/interfaces/irdb + src/drivers/library + ''' +libdirs=Split(libdirs) + +cpppath=''' + $SMPSA_HOME/include \ + $SMPSA_HOME/include/base \ + $SMPSA_HOME/include/interfaces \ + $SMPSA_HOME/include/interfaces/abstract \ + $SECURITY_TRANSFORMS_HOME/include \ + $SECURITY_TRANSFORMS_HOME/beaengine/include \ + $SECURITY_TRANSFORMS_HOME/libIRDB/include/ \ + $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include/ \ + ''' + +IRDB_CCFLAGS=''' -std=c++0x \ + -w \ + -DSTARS_IRDB_INTERFACE \ + '''+STARS_CCFLAGS+" " + +IRDB_LIBPATH="$SECURITY_TRANSFORMS_HOME/lib $SECURITY_TRANSFORMS_HOME/beaengine/lib/Linux.gnu.Debug " +LIBS="IRDB-core IRDB-cfg pqxx BeaEngine_s_d MEDSannotation pq IRDB-util" +IRDB_LDFLAGS=" " + + +# set 32/64 bit build properly +if int(argenv['do_64bit_build']) == 1: + IRDB_CCFLAGS+=" -m64 " + IRDB_LDFLAGS+=" -m64 " +else: + IRDB_CCFLAGS+=" -m32 " + IRDB_LDFLAGS+=" -m32 " + + + +# find files +#print 'dirs: ',dirs +libfiles=[] +for dir in libdirs: + libfiles=libfiles+Glob(os.path.join(dir,"*.cpp")) + +#setup the environment +irdbenv=argenv.Clone(CCFLAGS=IRDB_CCFLAGS, LINKFLAGS=IRDB_LDFLAGS, CPPPATH=Split(cpppath)); + + +# build the program +starslib=irdbenv.Library('stars', libfiles) +install=argenv.Install("$SECURITY_TRANSFORMS_HOME/lib/", starslib) +Default(install) + + +Return('starslib') diff --git a/include/stars.h b/include/stars.h new file mode 100644 index 00000000..09f780ab --- /dev/null +++ b/include/stars.h @@ -0,0 +1,34 @@ + +#ifndef STARS_IRDB_Interface_h +#define STARS_IRDB_Interface_h + +#include <stdlib.h> +#include <fstream> +#include <libIRDB-core.hpp> +#include <libgen.h> +#include <assert.h> + + +namespace STARS +{ + + class IRDB_Interface_t + { + public: + IRDB_Interface_t(libIRDB::pqxxDB_t &p_pqxx_interface) + : pqxx_interface(p_pqxx_interface) + { + }; + + // invoke stars on one file. + int do_STARS(libIRDB::FileIR_t* firp); + + private: + libIRDB::pqxxDB_t &pqxx_interface; + }; + + + +} + +#endif diff --git a/src/base/SMPFunction.cpp b/src/base/SMPFunction.cpp index b3824a2f..6a21dadf 100644 --- a/src/base/SMPFunction.cpp +++ b/src/base/SMPFunction.cpp @@ -5698,7 +5698,7 @@ void SMPFunction::SetLinks(void) { SMP_msg("INFO: Removing all nops block at %lx\n", (unsigned long) CurrBlock->GetFirstAddr()); else { CurrBlock->SetUnreachableBlock(true); - SMP_msg("INFO: Removing unreachable block at %lx\n", (unsigned long) CurrBlock->GetFirstAddr()); + SMP_msg("INFO: Function is Removing unreachable block at %llx\n", (unsigned long long) CurrBlock->GetFirstAddr()); } this->RemoveBlock(CurrBlock, BlockIter); diff --git a/src/drivers/irdb/stars_driver.cpp b/src/drivers/irdb/stars_driver.cpp index cae2aa9b..a65314b1 100644 --- a/src/drivers/irdb/stars_driver.cpp +++ b/src/drivers/irdb/stars_driver.cpp @@ -4,6 +4,7 @@ #include <fstream> #include <libIRDB-core.hpp> #include <libgen.h> +#include <stars.h> using namespace std; using namespace libIRDB; @@ -68,8 +69,10 @@ int main(int argc, char **argv) int success=true; + STARS::IRDB_Interface_t stars_analysis_engine(pqxx_interface); + // run stars - do_STARS(firp, pqxx_interface); + stars_analysis_engine.do_STARS(firp); delete firp; } diff --git a/src/drivers/irdb/stars_irdb.cpp b/src/drivers/library/stars_irdb.cpp similarity index 97% rename from src/drivers/irdb/stars_irdb.cpp rename to src/drivers/library/stars_irdb.cpp index baea71d2..f527e25e 100644 --- a/src/drivers/irdb/stars_irdb.cpp +++ b/src/drivers/library/stars_irdb.cpp @@ -5,6 +5,8 @@ #include <libgen.h> #include <assert.h> +#include <stars.h> + using namespace std; using namespace libIRDB; @@ -150,11 +152,11 @@ void OutputStatistics() SMP_fprintf(global_STARS_program->GetInfoAnnotFile(), " 8000000 2 SUCCESS ANALYSISCOMPLETED\n"); } -int do_STARS(FileIR_t* firp, pqxxDB_t &pqxx_interface) +int STARS::IRDB_Interface_t::do_STARS(FileIR_t* firp) { STARS_IRDB_Program_t* gsp=NULL; global_stars_interface = new STARS_IRDB_Interface_t(firp, pqxx_interface); - global_STARS_program = gsp = new STARS_IRDB_Program_t(firp); + global_STARS_program = gsp = new STARS_IRDB_Program_t(firp); // this is initing the global_stars_program (GSP) -- GitLab