diff --git a/symbol_inject/cmd/symbol_inject.go b/symbol_inject/cmd/symbol_inject.go index 1397b37b1..89b361907 100644 --- a/symbol_inject/cmd/symbol_inject.go +++ b/symbol_inject/cmd/symbol_inject.go @@ -94,4 +94,13 @@ func main() { os.Remove(*output) os.Exit(5) } + + if file.IsMachoFile { + err = symbol_inject.CodeSignMachoFile(*output) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Remove(*output) + os.Exit(6) + } + } } diff --git a/symbol_inject/macho.go b/symbol_inject/macho.go index 6ee3f4fbd..9946d34af 100644 --- a/symbol_inject/macho.go +++ b/symbol_inject/macho.go @@ -18,6 +18,7 @@ import ( "debug/macho" "fmt" "io" + "os/exec" "sort" "strings" ) @@ -40,7 +41,7 @@ func extractMachoSymbols(machoFile *macho.File) (*File, error) { return symbols[i].Value < symbols[j].Value }) - file := &File{} + file := &File{IsMachoFile: true} for _, section := range machoFile.Sections { file.Sections = append(file.Sections, &Section{ @@ -95,3 +96,8 @@ func dumpMachoSymbols(r io.ReaderAt) error { return nil } + +func CodeSignMachoFile(path string) error { + cmd := exec.Command("/usr/bin/codesign", "--force", "-s", "-", path) + return cmd.Run() +} diff --git a/symbol_inject/symbol_inject.go b/symbol_inject/symbol_inject.go index 2a3d67e6d..77aff6fe3 100644 --- a/symbol_inject/symbol_inject.go +++ b/symbol_inject/symbol_inject.go @@ -161,9 +161,10 @@ func findSymbol(file *File, symbolName string) (uint64, uint64, error) { } type File struct { - r io.ReaderAt - Symbols []*Symbol - Sections []*Section + r io.ReaderAt + Symbols []*Symbol + Sections []*Section + IsMachoFile bool } type Symbol struct {