You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			118 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
env GOGARBLE=test/main
 | 
						|
 | 
						|
garble build
 | 
						|
exec ./main
 | 
						|
! stdout 'garble_main\.go|garble_other_filename|is sorted'
 | 
						|
 | 
						|
! binsubstr main$exe 'garble_main.go' 'garble_other_filename'
 | 
						|
 | 
						|
[short] stop # no need to verify this with -short
 | 
						|
 | 
						|
go build
 | 
						|
exec ./main
 | 
						|
stdout 'garble_main.go'
 | 
						|
stdout 'garble_other_filename'
 | 
						|
stdout ':19: main'
 | 
						|
stdout 'initPositions is sorted'
 | 
						|
stdout 'varPositions is sorted'
 | 
						|
 | 
						|
-- go.mod --
 | 
						|
module test/main
 | 
						|
 | 
						|
go 1.17
 | 
						|
-- garble_main.go --
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"runtime"
 | 
						|
	"sort"
 | 
						|
)
 | 
						|
 | 
						|
var _, globalFile, globalLine, _ = runtime.Caller(0)
 | 
						|
 | 
						|
func init() {
 | 
						|
	_, file, line, _ := runtime.Caller(0)
 | 
						|
	fmt.Printf("%s:%d: init\n", file, line)
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	fmt.Printf("%s:%d: global\n", globalFile, globalLine)
 | 
						|
 | 
						|
	_, file, line, _ := runtime.Caller(0)
 | 
						|
	fmt.Printf("%s:%d: main\n", file, line)
 | 
						|
 | 
						|
	funcDecl()
 | 
						|
	funcVar()
 | 
						|
 | 
						|
	// initPositions is filled by ten consecutive funcs.
 | 
						|
	// If we are not shuffling or obfuscating line numbers,
 | 
						|
	// this list will be sorted.
 | 
						|
	// If we are, it's extremely unlikely it would remain sorted.
 | 
						|
	if sort.IsSorted(sort.StringSlice(initPositions)) {
 | 
						|
		fmt.Println("initPositions is sorted")
 | 
						|
	}
 | 
						|
 | 
						|
	// Same as the above, but with vars.
 | 
						|
	if sort.IsSorted(sort.StringSlice(varPositions)) {
 | 
						|
		fmt.Println("varPositions is sorted")
 | 
						|
	}
 | 
						|
 | 
						|
	// Adding "/*text*/" comments here is tricky,
 | 
						|
	// as we don't want to turn "a/b" into "a//*text*/b".
 | 
						|
	// We need "a/ /*text*/b" to preserve the syntax.
 | 
						|
	// The nested expression is needed to prevent spaces.
 | 
						|
	fmt.Printf("%v\n", 10*float64(3.0)/float64(4.0))
 | 
						|
}
 | 
						|
-- garble_other_filename.go --
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"runtime"
 | 
						|
)
 | 
						|
 | 
						|
func funcDecl() {
 | 
						|
	_, file, line, _ := runtime.Caller(0)
 | 
						|
	fmt.Printf("%s:%d: func\n", file, line)
 | 
						|
}
 | 
						|
 | 
						|
var funcVar = func() {
 | 
						|
	_, file, line, _ := runtime.Caller(0)
 | 
						|
	fmt.Printf("%s:%d: func var\n", file, line)
 | 
						|
}
 | 
						|
 | 
						|
var initPositions []string
 | 
						|
 | 
						|
func curPos() string {
 | 
						|
	_, file, line, _ := runtime.Caller(1)
 | 
						|
	return fmt.Sprintf("%s:%d", file, line)
 | 
						|
}
 | 
						|
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
func init() { initPositions = append(initPositions, curPos()) }
 | 
						|
 | 
						|
var varLine0 = curPos()
 | 
						|
var varLine1 = curPos()
 | 
						|
var varLine2 = curPos()
 | 
						|
var varLine3 = curPos()
 | 
						|
var varLine4 = curPos()
 | 
						|
var varLine5 = curPos()
 | 
						|
var varLine6 = curPos()
 | 
						|
var varLine7 = curPos()
 | 
						|
var varLine8 = curPos()
 | 
						|
var varLine9 = curPos()
 | 
						|
 | 
						|
var varPositions = []string{
 | 
						|
	varLine0, varLine1, varLine2, varLine3, varLine4,
 | 
						|
	varLine5, varLine6, varLine7, varLine8, varLine9,
 | 
						|
}
 |