diff --git a/srcs/binarytool/run_binarytool.go b/srcs/binarytool/run_binarytool.go index 0d6b230..9939b36 100644 --- a/srcs/binarytool/run_binarytool.go +++ b/srcs/binarytool/run_binarytool.go @@ -12,6 +12,7 @@ import ( "os" "strings" "tools/srcs/binarytool/elf64analyser" + "tools/srcs/binarytool/ukManager" u "tools/srcs/common" ) @@ -33,24 +34,24 @@ func RunBinaryAnalyser(homeDir string) { } // Check if a json file is used or if it is via command line - var unikernels *Unikernels + manager := new(ukManager.Manager) if len(*args.StringArg[listArg]) > 0 { - unikernels = new(Unikernels) - unikernels.Unikernel = make([]Unikernel, len(*args.StringArg[listArg])) + manager.Unikernels = new(ukManager.Unikernels) + manager.Unikernels.Unikernel = make([]ukManager.Unikernel, len(*args.StringArg[listArg])) mapping := false if *args.BoolArg[mappingArg] { mapping = true } list := strings.Split(*args.StringArg[listArg], ",") for i, arg := range list { - unikernels.Unikernel[i] = Unikernel{ + manager.Unikernels.Unikernel[i] = ukManager.Unikernel{ BuildPath: arg, DisplayMapping: mapping, } } } else if len(*args.StringArg[filesArg]) > 0 { var err error - unikernels, err = ReadJsonFile(*args.StringArg[filesArg]) + manager.Unikernels, err = ukManager.ReadJsonFile(*args.StringArg[filesArg]) if err != nil { u.PrintErr(err) } @@ -61,7 +62,7 @@ func RunBinaryAnalyser(homeDir string) { var comparison elf64analyser.ComparisonElf comparison.GroupFileSegment = make([]*elf64analyser.ElfFileSegment, 0) - for i, uk := range unikernels.Unikernel { + for i, uk := range manager.Unikernels.Unikernel { uk.Analyser = new(elf64analyser.ElfAnalyser) if len(uk.BuildPath) > 0 { @@ -90,6 +91,15 @@ func RunBinaryAnalyser(homeDir string) { fmt.Println("=====================================================") } + if uk.ComputeLibsMapping && len(uk.LibsMapping) > 0 { + + if err != nil { + u.PrintErr(err) + } else { + uk.Analyser.ComputeAlignedMapping(uk.ElfFile, uk.LibsMapping) + } + } + if uk.DisplayStatSize { uk.Analyser.DisplayStatSize(uk.ElfFile) } diff --git a/srcs/binarytool/helpers.go b/srcs/binarytool/ukManager/helpers.go similarity index 97% rename from srcs/binarytool/helpers.go rename to srcs/binarytool/ukManager/helpers.go index 96533d8..5efb815 100644 --- a/srcs/binarytool/helpers.go +++ b/srcs/binarytool/ukManager/helpers.go @@ -4,7 +4,7 @@ // // Author: Gaulthier Gain -package binarytool +package ukManager import ( "encoding/json" diff --git a/srcs/binarytool/ukManager/manager.go b/srcs/binarytool/ukManager/manager.go new file mode 100644 index 0000000..ff73638 --- /dev/null +++ b/srcs/binarytool/ukManager/manager.go @@ -0,0 +1,17 @@ +package ukManager + +type Manager struct { + Unikernels *Unikernels + MicroLibs map[string]MicroLibs +} + +type MicroLibs struct { + Name string + StartAddr uint64 + Size uint64 + instance int +} + +func checkInstance() { + +} diff --git a/srcs/binarytool/unikernels.go b/srcs/binarytool/ukManager/unikernels.go similarity index 85% rename from srcs/binarytool/unikernels.go rename to srcs/binarytool/ukManager/unikernels.go index ccd16a3..9402d35 100644 --- a/srcs/binarytool/unikernels.go +++ b/srcs/binarytool/ukManager/unikernels.go @@ -4,7 +4,7 @@ // // Author: Gaulthier Gain -package binarytool +package ukManager import ( "io/ioutil" @@ -28,17 +28,24 @@ type Unikernels struct { } type Unikernel struct { - BuildPath string `json:"buildPath"` - Kernel string `json:"kernel"` - SectionSplit string `json:"splitSection"` - DisplayMapping bool `json:"displayMapping"` - DisplayStatSize bool `json:"displayStatSize"` - IgnoredPlats []string `json:"ignoredPlats"` - DisplayElfFile []string `json:"displayElfFile"` - DisplaySectionInfo []string `json:"displaySectionInfo"` + BuildPath string `json:"buildPath"` + Kernel string `json:"kernel"` + SectionSplit string `json:"splitSection"` + DisplayMapping bool `json:"displayMapping"` + DisplayStatSize bool `json:"displayStatSize"` + ComputeLibsMapping bool `json:"computeLibsMapping"` + + IgnoredPlats []string `json:"ignoredPlats"` + DisplayElfFile []string `json:"displayElfFile"` + DisplaySectionInfo []string `json:"displaySectionInfo"` + FindSectionByAddress []string `json:"findSectionByAddress"` CompareGroup int `json:"compareGroup"` + // Used to generate new link.lds file + ComputeTextAddr string `json:"computeTextAddr"` + LibsMapping []string `json:"LibsMapping"` + ElfFile *elf64core.ELF64File ListObjs []*elf64core.ELF64File Analyser *elf64analyser.ElfAnalyser