First version

This commit is contained in:
Gaulthier Gain 2021-12-07 10:24:33 +01:00
parent 726e349092
commit 12bc9774e0
4 changed files with 50 additions and 16 deletions

View file

@ -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)
}

View file

@ -4,7 +4,7 @@
//
// Author: Gaulthier Gain <gaulthier.gain@uliege.be>
package binarytool
package ukManager
import (
"encoding/json"

View file

@ -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() {
}

View file

@ -4,7 +4,7 @@
//
// Author: Gaulthier Gain <gaulthier.gain@uliege.be>
package binarytool
package ukManager
import (
"io/ioutil"
@ -33,12 +33,19 @@ type Unikernel struct {
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