Fix symbol_inject on win32 exes

Win32 exes seem to prefix each symbol with an underscore like
macho.

Test: build_version_test
Change-Id: I9de0a0f5f25f93ad17d34b7c1b993511c77a57eb
diff --git a/cmd/symbol_inject/macho.go b/cmd/symbol_inject/macho.go
index 0945293..6a1de99 100644
--- a/cmd/symbol_inject/macho.go
+++ b/cmd/symbol_inject/macho.go
@@ -26,7 +26,7 @@
 		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 {
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