in cmd/seccomp-profiler/main.go [166:201]
func getBinaryArch(binary string) (*arch.Info, string, error) {
f, err := os.Open(binary)
if err != nil {
return nil, "", err
}
defer f.Close()
bin, err := elf.NewFile(f)
if err != nil {
return nil, "", err
}
if section := bin.Section(".note.go.buildid"); section == nil {
return nil, "", fmt.Errorf("%v is not a Go binary", binary)
}
libs, err := bin.DynString(elf.DT_NEEDED)
if err != nil {
return nil, "", err
}
if len(libs) > 0 {
log.Println("Binary is dynamically linked with", strings.Join(libs, ", "))
log.Println("WARN: The profiler cannot detect syscalls used in linked libraries.")
}
switch bin.Machine {
case elf.EM_386:
return arch.I386, "386", nil
case elf.EM_ARM:
return arch.ARM, "arm", nil
case elf.EM_X86_64:
return arch.X86_64, "amd64", nil
default:
return nil, "", fmt.Errorf("%v architecture is not supported by go-seccomp-bpf", bin.Machine)
}
}