github.com/undoio/delve@v1.9.0/service/debugger/debugger_unix.go (about) 1 //go:build !windows 2 // +build !windows 3 4 package debugger 5 6 import ( 7 "debug/elf" 8 "debug/macho" 9 "os" 10 "runtime" 11 12 "github.com/undoio/delve/service/api" 13 ) 14 15 func verifyBinaryFormat(exePath string) error { 16 f, err := os.Open(exePath) 17 if err != nil { 18 return err 19 } 20 defer f.Close() 21 22 fi, err := f.Stat() 23 if err != nil { 24 return err 25 } 26 if (fi.Mode() & 0111) == 0 { 27 return api.ErrNotExecutable 28 } 29 30 // check that the binary format is what we expect for the host system 31 var exe interface{ Close() error } 32 switch runtime.GOOS { 33 case "darwin": 34 exe, err = macho.NewFile(f) 35 case "linux", "freebsd": 36 exe, err = elf.NewFile(f) 37 default: 38 panic("attempting to open file Delve cannot parse") 39 } 40 if err != nil { 41 return api.ErrNotExecutable 42 } 43 exe.Close() 44 return nil 45 }