break-hash.go: Search ELF dynamic symbols if symbols not found.

Allows the utility to work on shared libraries.

Also, don't printf the output from hex.Dump() as it may contain
formatting chars such as %.

Change-Id: I3c091436271c132417fd0212955a6575ef57af50
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/38244
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/util/fipstools/break-hash.go b/util/fipstools/break-hash.go
index 53e1c5c..8c817d8 100644
--- a/util/fipstools/break-hash.go
+++ b/util/fipstools/break-hash.go
@@ -56,6 +56,10 @@
 
 	symbols, err := object.Symbols()
 	if err != nil {
+		fmt.Fprintf(os.Stderr, "%s\nTrying dynamic symbols\n", err)
+		symbols, err = object.DynamicSymbols()
+	}
+	if err != nil {
 		return errors.New("failed to parse symbols: " + err.Error())
 	}
 
@@ -123,7 +127,7 @@
 	newHash := mac.Sum(nil)
 
 	fmt.Printf("Found start of module at offset 0x%x (VMA 0x%x):\n", start-textSection.Addr, start)
-	fmt.Printf(hex.Dump(moduleText[:128]))
+	fmt.Println(hex.Dump(moduleText[:128]))
 	fmt.Printf("\nHash of module was:          %x\n", hashWas)
 	fmt.Printf("Hash of corrupted module is: %x\n", newHash)