diff --git a/.gitattributes b/.gitattributes index 15aee79198f31adaf1e1d103277a5443c6fe9ddd..1381bb908cdfabce89747065c97ae9c8cabad586 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 739f8f4f4d1360fb0eb7aad79cd2c52c9b7c7bba..6113d35f29963e2ed22ab50f8b2d8b7b594b8cab 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 e97b48b72bce9f852643aa1e6729678205038f0c..ad8b3658cbd8510cf5978650fd59e6703ce6b2a1 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 0000000000000000000000000000000000000000..7a516952ad22e16c2575f3f05611283ce1935fb8 --- /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 0000000000000000000000000000000000000000..09f780abc852cb63e7e4004f5b6957e4a1f69b6a --- /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 b3824a2f70f1513c482d7a3b449f59df2bdc46a7..6a21dadf0282915d02fd68d7bb717a37d075affd 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 cae2aa9ba4d61fcbac313c6abc8aef7c2dc0d5ca..a65314b177cc33d5975a8601db9a3de836b0a142 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 baea71d2b5bb00d903d848f932fd0c0151e15b5f..f527e25ee50fc4b6f05cc657f35360e5ff5f7e1f 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)