code reorganisation
This commit is contained in:
parent
a4ee7e7526
commit
5338fc37ed
1 changed files with 0 additions and 117 deletions
|
@ -11,9 +11,6 @@ import (
|
|||
"debug/elf"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
u "tools/srcs/common"
|
||||
)
|
||||
|
||||
|
@ -194,114 +191,6 @@ func executeDependAptCache(programName string, data *u.StaticData,
|
|||
return nil
|
||||
}
|
||||
|
||||
// getProgramFolder gets the folder path in which the given program is located, according to the
|
||||
// Unikraft standard (e.g., /home/.../apps/programFolder/.../program).
|
||||
//
|
||||
// It returns the folder containing the program files according to the standard described above.
|
||||
func getProgramFolder(programPath string) string {
|
||||
|
||||
tmp := strings.Split(programPath, "/")
|
||||
i := 2
|
||||
|
||||
for ; i < len(tmp); i++ {
|
||||
if tmp[len(tmp)-i] == "apps" {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
folderPath := strings.Join(tmp[:len(tmp)-i+2], "/")
|
||||
return folderPath
|
||||
}
|
||||
|
||||
// findSourcesFiles puts together all C/C++ source files found in a given application folder.
|
||||
//
|
||||
// It returns a slice containing the found source file names and an error if any, otherwise it
|
||||
// returns nil.
|
||||
func findSourcesFiles(workspace string) ([]string, error) {
|
||||
|
||||
var filenames []string
|
||||
|
||||
err := filepath.Walk(workspace,
|
||||
func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ext := filepath.Ext(info.Name())
|
||||
if ext == ".c" || ext == ".cpp" || ext == ".cc" || ext == ".h" || ext == ".hpp" ||
|
||||
ext == ".hcc" {
|
||||
filenames = append(filenames, path)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return filenames, nil
|
||||
}
|
||||
|
||||
// TODO REPLACE
|
||||
// ExecuteCommand a single command without displaying the output.
|
||||
//
|
||||
// It returns a string which represents stdout and an error if any, otherwise
|
||||
// it returns nil.
|
||||
func ExecuteCommand(command string, arguments []string) (string, error) {
|
||||
out, err := exec.Command(command, arguments...).CombinedOutput()
|
||||
return string(out), err
|
||||
}
|
||||
|
||||
// addSourceFileSymbols adds all the symbols present in 'output' to the static data field in
|
||||
// 'data'.
|
||||
func addSourceFileSymbols(output string, data *u.Data) {
|
||||
outputTab := strings.Split(output, ",")
|
||||
|
||||
// Get the list of system calls
|
||||
systemCalls := initSystemCalls()
|
||||
|
||||
for _, s := range outputTab {
|
||||
if _, isSyscall := systemCalls[s]; isSyscall {
|
||||
data.StaticData.SystemCalls[s] = systemCalls[s]
|
||||
} else {
|
||||
data.StaticData.Symbols[s] = ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// extractPrototype executes the parserClang.py script on each source file to extracts all possible
|
||||
// symbols of each of these files.
|
||||
//
|
||||
// It returns an error if any, otherwise it returns nil.
|
||||
func extractPrototype(sourcesFiltered []string, data *u.Data) error {
|
||||
|
||||
for _, f := range sourcesFiltered {
|
||||
script := filepath.Join(os.Getenv("GOPATH"), "src", "tools", "srcs", "dependtool",
|
||||
"parserClang.py")
|
||||
output, err := ExecuteCommand("python3", []string{script, "-q", "-t", f})
|
||||
if err != nil {
|
||||
u.PrintWarning("Incomplete analysis with file " + f)
|
||||
continue
|
||||
}
|
||||
addSourceFileSymbols(output, data)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// gatherSourceFileSymbols gathers symbols of source files from a given application folder.
|
||||
//
|
||||
// It returns an error if any, otherwise it returns nil.
|
||||
func gatherSourceFileSymbols(data *u.Data, programPath string) error {
|
||||
|
||||
sourceFiles, err := findSourcesFiles(getProgramFolder(programPath))
|
||||
if err != nil {
|
||||
u.PrintErr(err)
|
||||
}
|
||||
|
||||
if err := extractPrototype(sourceFiles, data); err != nil {
|
||||
u.PrintErr(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// -------------------------------------Run-------------------------------------
|
||||
|
||||
// staticAnalyser runs the static analysis to get shared libraries,
|
||||
|
@ -351,12 +240,6 @@ func staticAnalyser(elfFile *elf.File, isDynamic, isLinux bool, args u.Arguments
|
|||
}
|
||||
}
|
||||
|
||||
// Detect symbols from source files
|
||||
u.PrintHeader2("(*) Gathering symbols from source files")
|
||||
if err := gatherSourceFileSymbols(data, programPath); err != nil {
|
||||
u.PrintWarning(err)
|
||||
}
|
||||
|
||||
// Detect symbols from shared libraries
|
||||
if fullStaticAnalysis && isLinux {
|
||||
u.PrintHeader2("(*) Gathering symbols and system calls of shared libraries from binary" +
|
||||
|
|
Loading…
Add table
Reference in a new issue