From d819d4df2ae41917fefc7f25a0bcb8a7d3573c25 Mon Sep 17 00:00:00 2001 From: Joey Jiao Date: Mon, 1 Jul 2024 10:45:10 +0800 Subject: all: calc kaslr offset and remove kaslr_offset from module addr --- pkg/cover/backend/modules.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'pkg/cover/backend') diff --git a/pkg/cover/backend/modules.go b/pkg/cover/backend/modules.go index c9501d34c..c96d4bd05 100644 --- a/pkg/cover/backend/modules.go +++ b/pkg/cover/backend/modules.go @@ -148,3 +148,44 @@ func searchModuleName(data []byte) string { } return string(data[pos+len(key) : end]) } + +func getKaslrOffset(modules []*KernelModule, pcBase uint64) uint64 { + for _, mod := range modules { + if mod.Name == "" { + return mod.Addr - pcBase + } + } + return 0 +} + +// when CONFIG_RANDOMIZE_BASE=y, pc from kcov already removed kaslr_offset. +func FixModules(localModules, modules []*KernelModule, pcBase uint64) []*KernelModule { + kaslrOffset := getKaslrOffset(modules, pcBase) + var modules1 []*KernelModule + for _, mod := range modules { + size := uint64(0) + path := "" + for _, modA := range localModules { + if modA.Name == mod.Name { + size = modA.Size + path = modA.Path + break + } + } + if path == "" { + continue + } + addr := mod.Addr - kaslrOffset + if mod.Name == "" { + // mod.Addr for core kernel from target is _stext addr + addr = 0 + } + modules1 = append(modules1, &KernelModule{ + Name: mod.Name, + Size: size, + Addr: addr, + Path: path, + }) + } + return modules1 +} -- cgit mrf-deployment