Export pageSize and consider "ld.o" files
This commit is contained in:
parent
6e9f0f5dfe
commit
726e349092
5 changed files with 13 additions and 13 deletions
|
@ -52,8 +52,8 @@ func (analyser *ElfAnalyser) DisplayMapping() {
|
||||||
|
|
||||||
_, _ = fmt.Fprintf(w, "%s \t0x%x \t0x%x \t0x%x\t%d\t%f\t%f\n",
|
_, _ = fmt.Fprintf(w, "%s \t0x%x \t0x%x \t0x%x\t%d\t%f\t%f\n",
|
||||||
name, lib.StartAddr, lib.EndAddr, lib.Size,
|
name, lib.StartAddr, lib.EndAddr, lib.Size,
|
||||||
lib.NbSymbols, float32(lib.Size)/float32(pageSize),
|
lib.NbSymbols, float32(lib.Size)/float32(PageSize),
|
||||||
float32(lib.StartAddr)/float32(pageSize))
|
float32(lib.StartAddr)/float32(PageSize))
|
||||||
}
|
}
|
||||||
_ = w.Flush()
|
_ = w.Flush()
|
||||||
}
|
}
|
||||||
|
@ -222,7 +222,7 @@ func (analyser *ElfAnalyser) SplitIntoPagesBySection(elfFile *elf64core.ELF64Fil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateNewPage(startAddress uint64, k int, raw []byte) *ElfPage {
|
func CreateNewPage(startAddress uint64, k int, raw []byte) *ElfPage {
|
||||||
byteArray := make([]byte, pageSize)
|
byteArray := make([]byte, PageSize)
|
||||||
b := raw
|
b := raw
|
||||||
if cpd := copy(byteArray, b); cpd == 0 {
|
if cpd := copy(byteArray, b); cpd == 0 {
|
||||||
u.PrintWarning("0 bytes were copied")
|
u.PrintWarning("0 bytes were copied")
|
||||||
|
@ -241,9 +241,9 @@ func CreateNewPage(startAddress uint64, k int, raw []byte) *ElfPage {
|
||||||
func (analyser *ElfAnalyser) computePage(elfFile *elf64core.ELF64File, section string, indexSection int) {
|
func (analyser *ElfAnalyser) computePage(elfFile *elf64core.ELF64File, section string, indexSection int) {
|
||||||
offsetTextSection := elfFile.SectionsTable.DataSect[indexSection].Elf64section.FileOffset
|
offsetTextSection := elfFile.SectionsTable.DataSect[indexSection].Elf64section.FileOffset
|
||||||
k := 0
|
k := 0
|
||||||
for i := offsetTextSection; i < offsetTextSection+elfFile.SectionsTable.DataSect[indexSection].Elf64section.Size; i += pageSize {
|
for i := offsetTextSection; i < offsetTextSection+elfFile.SectionsTable.DataSect[indexSection].Elf64section.Size; i += PageSize {
|
||||||
|
|
||||||
end := i + pageSize
|
end := i + PageSize
|
||||||
if end >= uint64(len(elfFile.Raw)) {
|
if end >= uint64(len(elfFile.Raw)) {
|
||||||
end = uint64(len(elfFile.Raw) - 1)
|
end = uint64(len(elfFile.Raw) - 1)
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const pageSize = 0x1000
|
const PageSize = 0x1000
|
||||||
|
|
||||||
type ElfFileSegment struct {
|
type ElfFileSegment struct {
|
||||||
Filename string
|
Filename string
|
||||||
|
|
|
@ -242,7 +242,7 @@ func (analyser *ElfAnalyser) DisplayStatSize(elfFile *elf64core.ELF64File) {
|
||||||
size = s.Elf64section.Size
|
size = s.Elf64section.Size
|
||||||
totalSizeText += size
|
totalSizeText += size
|
||||||
}
|
}
|
||||||
_, _ = fmt.Fprintf(w, "%s\t%d (0x%x)\t%.2f\t%s\n", s.Name, size, size, float32(size)/float32(pageSize), currNext)
|
_, _ = fmt.Fprintf(w, "%s\t%d (0x%x)\t%.2f\t%s\n", s.Name, size, size, float32(size)/float32(PageSize), currNext)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -250,8 +250,8 @@ func (analyser *ElfAnalyser) DisplayStatSize(elfFile *elf64core.ELF64File) {
|
||||||
_, _ = fmt.Fprintf(w, "Total Size:\n")
|
_, _ = fmt.Fprintf(w, "Total Size:\n")
|
||||||
_, _ = fmt.Fprintf(w, "Section .text:\t%d (0x%x)\n", totalSizeText, totalSizeText)
|
_, _ = fmt.Fprintf(w, "Section .text:\t%d (0x%x)\n", totalSizeText, totalSizeText)
|
||||||
_, _ = fmt.Fprintf(w, "All sections:\t%d (0x%x)\n", totalSizeElf, totalSizeElf)
|
_, _ = fmt.Fprintf(w, "All sections:\t%d (0x%x)\n", totalSizeElf, totalSizeElf)
|
||||||
_, _ = fmt.Fprintf(w, "#Pages (.text):\t%d\n", roundPage(float64(totalSizeText)/float64(pageSize)))
|
_, _ = fmt.Fprintf(w, "#Pages (.text):\t%d\n", roundPage(float64(totalSizeText)/float64(PageSize)))
|
||||||
_, _ = fmt.Fprintf(w, "#Pages (all sections):\t%d\n", roundPage(float64(totalSizeElf)/float64(pageSize)))
|
_, _ = fmt.Fprintf(w, "#Pages (all sections):\t%d\n", roundPage(float64(totalSizeElf)/float64(PageSize)))
|
||||||
_ = w.Flush()
|
_ = w.Flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ func RunBinaryAnalyser(homeDir string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if foundSection {
|
if foundSection && len(uk.SectionSplit) > 0 {
|
||||||
|
|
||||||
path := homeDir + u.SEP + pagesPath
|
path := homeDir + u.SEP + pagesPath
|
||||||
if _, err := os.Stat(path); os.IsNotExist(err) {
|
if _, err := os.Stat(path); os.IsNotExist(err) {
|
||||||
|
|
|
@ -73,11 +73,11 @@ func (uk *Unikernel) GetFiles() error {
|
||||||
for _, f := range files {
|
for _, f := range files {
|
||||||
|
|
||||||
if f.IsDir() || strings.Contains(f.Name(), makefile) ||
|
if f.IsDir() || strings.Contains(f.Name(), makefile) ||
|
||||||
strings.Contains(f.Name(), config) ||
|
strings.Contains(f.Name(), config) {
|
||||||
strings.Contains(f.Name(), ldExt) {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if filepath.Ext(strings.TrimSpace(f.Name())) == objExt &&
|
|
||||||
|
if strings.Contains(f.Name(), ldExt) &&
|
||||||
!stringInSlice(f.Name(), uk.IgnoredPlats) {
|
!stringInSlice(f.Name(), uk.IgnoredPlats) {
|
||||||
objFile, err := parseFile(uk.BuildPath, f.Name())
|
objFile, err := parseFile(uk.BuildPath, f.Name())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Add table
Reference in a new issue