mirror of
https://github.com/reactos/syzkaller.git
synced 2024-11-23 11:29:46 +00:00
3aa380090f
Add a second mode that extracts constant values from ELF object, instead of running the executable. This allows to not (1) link binaries, (2) use proper cross-compiler. It finally fixes 386/arm extracts for my distro. Hopefully not makes things worse for others, should generally be safer/more reliable. The current mode is left b/c I can't test all OSes, windows binaries are not ELF, so we may need it anyway. But later we may switch more OSes to this new mode if they break (fuchsia?).
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
// Copyright 2018 syzkaller project authors. All rights reserved.
|
|
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/google/syzkaller/pkg/compiler"
|
|
)
|
|
|
|
type trusty struct{}
|
|
|
|
func (*trusty) prepare(sourcedir string, build bool, arches []string) error {
|
|
if sourcedir == "" {
|
|
return fmt.Errorf("provide path to kernel checkout via -sourcedir flag (or make extract SOURCEDIR)")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (*trusty) prepareArch(arch *Arch) error {
|
|
return nil
|
|
}
|
|
|
|
func (*trusty) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]uint64, map[string]bool, error) {
|
|
dir := arch.sourceDir
|
|
args := []string{
|
|
"-fmessage-length=0",
|
|
"-I", filepath.Join(dir, "external", "lk", "include", "shared"),
|
|
"-I", filepath.Join(dir, "trusty", "user", "base", "include"),
|
|
}
|
|
for _, incdir := range info.Incdirs {
|
|
args = append(args, "-I"+filepath.Join(dir, incdir))
|
|
}
|
|
if arch.includeDirs != "" {
|
|
for _, dir := range strings.Split(arch.includeDirs, ",") {
|
|
args = append(args, "-I"+dir)
|
|
}
|
|
}
|
|
params := &extractParams{
|
|
DeclarePrintf: true,
|
|
}
|
|
return extract(info, "gcc", args, params)
|
|
}
|