Merge changes I41d1c3c3,I9de0a0f5

* changes:
  Sort macho symbol table entries
  Fix symbol_inject on win32 exes
diff --git a/cmd/symbol_inject/macho.go b/cmd/symbol_inject/macho.go
index 0945293..4a3ecc7 100644
--- a/cmd/symbol_inject/macho.go
+++ b/cmd/symbol_inject/macho.go
@@ -18,6 +18,7 @@
 	"debug/macho"
 	"fmt"
 	"io"
+	"sort"
 )
 
 func findMachoSymbol(r io.ReaderAt, symbolName string) (uint64, uint64, error) {
@@ -26,17 +27,25 @@
 		return maxUint64, maxUint64, cantParseError{err}
 	}
 
-	// TODO(ccross): why?
+	// symbols in macho files seem to be prefixed with an underscore
 	symbolName = "_" + symbolName
 
-	for i, symbol := range machoFile.Symtab.Syms {
+	symbols := machoFile.Symtab.Syms
+	sort.Slice(symbols, func(i, j int) bool {
+		if symbols[i].Sect != symbols[j].Sect {
+			return symbols[i].Sect < symbols[j].Sect
+		}
+		return symbols[i].Value < symbols[j].Value
+	})
+
+	for i, symbol := range symbols {
 		if symbol.Sect == 0 {
 			continue
 		}
 		if symbol.Name == symbolName {
 			var nextSymbol *macho.Symbol
-			if i+1 < len(machoFile.Symtab.Syms) {
-				nextSymbol = &machoFile.Symtab.Syms[i+1]
+			if i+1 < len(symbols) {
+				nextSymbol = &symbols[i+1]
 			}
 			return calculateMachoSymbolOffset(machoFile, symbol, nextSymbol)
 		}
diff --git a/cmd/symbol_inject/pe.go b/cmd/symbol_inject/pe.go
index 86f6162..dad530d 100644
--- a/cmd/symbol_inject/pe.go
+++ b/cmd/symbol_inject/pe.go
@@ -27,6 +27,11 @@
 		return maxUint64, maxUint64, cantParseError{err}
 	}
 
+	if peFile.FileHeader.Machine == pe.IMAGE_FILE_MACHINE_I386 {
+		// symbols in win32 exes seem to be prefixed with an underscore
+		symbolName = "_" + symbolName
+	}
+
 	sort.Slice(peFile.Symbols, func(i, j int) bool {
 		if peFile.Symbols[i].SectionNumber != peFile.Symbols[j].SectionNumber {
 			return peFile.Symbols[i].SectionNumber < peFile.Symbols[j].SectionNumber