From 2fd1e898b96c53d4863e2001bf6359509c950c9c Mon Sep 17 00:00:00 2001 From: Gaulthier Gain Date: Mon, 24 May 2021 10:17:35 +0200 Subject: [PATCH] Use bool variable instead using runtime packages + cosmetics Signed-off-by: Gaulthier Gain --- srcs/dependtool/run_deptool.go | 22 ++++++++++++---------- srcs/dependtool/static_analyser.go | 27 +++++++++++++-------------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/srcs/dependtool/run_deptool.go b/srcs/dependtool/run_deptool.go index 14e71e2..b90624f 100644 --- a/srcs/dependtool/run_deptool.go +++ b/srcs/dependtool/run_deptool.go @@ -52,25 +52,27 @@ func RunAnalyserTool(homeDir string, data *u.Data) { // Display Minor Details displayProgramDetails(programName, programPath, args) - // Check if the program is a binary - var elfFile *elf.File - dynamicCompiled := false - if strings.ToLower(runtime.GOOS) == "linux" { - elfFile, dynamicCompiled = checkElf(&programPath) + isDynamic := false + isLinux := strings.ToLower(runtime.GOOS) == "linux" + + // Check if the program is a binary + if isLinux { + elfFile, isDynamic = checkElf(&programPath) } else if strings.ToLower(runtime.GOOS) == "darwin" { + u.PrintWarning("Static analysis is limited on macOS") checkMachOS(&programPath) } + // Run static analyser if typeAnalysis == 0 || typeAnalysis == 1 { - // Run static analyser u.PrintHeader1("(1.1) RUN STATIC ANALYSIS") - runStaticAnalyser(elfFile, dynamicCompiled, args, programName, programPath, outFolder, data) + runStaticAnalyser(elfFile, isDynamic, isLinux, args, programName, programPath, outFolder, data) } // Run dynamic analyser if typeAnalysis == 0 || typeAnalysis == 2 { - if strings.ToLower(runtime.GOOS) == "linux" { + if isLinux { u.PrintHeader1("(1.2) RUN DYNAMIC ANALYSIS") runDynamicAnalyser(args, programName, programPath, outFolder, data) } else { @@ -153,10 +155,10 @@ func checkElf(programPath *string) (*elf.File, bool) { } // runStaticAnalyser runs the static analyser -func runStaticAnalyser(elfFile *elf.File, dynamicCompiled bool, args *u.Arguments, programName, programPath, +func runStaticAnalyser(elfFile *elf.File, isDynamic, isLinux bool, args *u.Arguments, programName, programPath, outFolder string, data *u.Data) { - staticAnalyser(elfFile, dynamicCompiled, *args, data, programPath) + staticAnalyser(elfFile, isDynamic, isLinux, *args, data, programPath) // Save static Data into text file if display mode is set if *args.BoolArg[saveOutputArg] { diff --git a/srcs/dependtool/static_analyser.go b/srcs/dependtool/static_analyser.go index d79d0aa..31a8779 100644 --- a/srcs/dependtool/static_analyser.go +++ b/srcs/dependtool/static_analyser.go @@ -11,8 +11,6 @@ import ( "debug/elf" "fmt" "os" - "runtime" - "strings" u "tools/srcs/common" ) @@ -192,7 +190,7 @@ func executeDependAptCache(programName string, data *u.StaticData, // staticAnalyser runs the static analysis to get shared libraries, // system calls and library calls of a given application. // -func staticAnalyser(elfFile *elf.File, dynamicCompiled bool, args u.Arguments, data *u.Data, programPath string) { +func staticAnalyser(elfFile *elf.File, isDynamic, isLinux bool, args u.Arguments, data *u.Data, programPath string) { programName := *args.StringArg[programArg] fullDeps := *args.BoolArg[fullDepsArg] @@ -202,41 +200,42 @@ func staticAnalyser(elfFile *elf.File, dynamicCompiled bool, args u.Arguments, d // If the program is a binary, runs static analysis tools if len(programPath) > 0 { - // Gather Data from binary file // Init symbols members staticData.Symbols = make(map[string]string) staticData.SystemCalls = make(map[string]int) staticData.SharedLibs = make(map[string][]string) - if strings.ToLower(runtime.GOOS) == "linux" { + if isLinux { + // Gather Data from binary file u.PrintHeader2("(*) Gathering symbols from binary file") - if err := gatherStaticSymbols(elfFile, dynamicCompiled, staticData); err != nil { + if err := gatherStaticSymbols(elfFile, isDynamic, staticData); err != nil { u.PrintWarning(err) } } u.PrintHeader2("(*) Gathering shared libraries from binary file") - if strings.ToLower(runtime.GOOS) == "linux" { - // Cannot use "elfFile.ImportedLibraries()" since we need the .so path + if isLinux { + // Cannot use "elfFile.ImportedLibraries()" since we need the ".so" path + // So in that case, we need to rely on ldd if err := gatherStaticSharedLibsLinux(programPath, staticData, fullDeps); err != nil { u.PrintWarning(err) } + + if err := elfFile.Close(); err != nil { + u.PrintWarning(err) + } } else { if err := gatherStaticSharedLibsMac(programPath, staticData, fullDeps); err != nil { u.PrintWarning(err) } } - - if err := elfFile.Close(); err != nil { - u.PrintWarning(err) - } } // Detect symbols from shared libraries - if fullStaticAnalysis { + if fullStaticAnalysis && isLinux { u.PrintHeader2("(*) Gathering symbols and system calls of shared libraries from binary file") for key, path := range staticData.SharedLibs { if len(path) > 0 { @@ -255,7 +254,7 @@ func staticAnalyser(elfFile *elf.File, dynamicCompiled bool, args u.Arguments, d } } - if strings.ToLower(runtime.GOOS) == "linux" { + if isLinux { // Gather Data from apt-cache u.PrintHeader2("(*) Gathering dependencies from apt-cache depends") if err := gatherDependencies(programName, staticData, fullDeps); err != nil {