NAME=Resolve all symbols on a stripped linux go1.18 binary
FILE=bins/golang/example-server-1.18-stripped
CMDS=<<EOF
aalg
fl~sym.go.~?
pdfs @ main ~str.
izq~?
ilq
EOF
EXPECT=<<EOF
4759
0x0063dfdc str.server.crt
0x0063e01e str.Reading_server_certificate:__s
0x0063e1d1 str.https:__localhost:8000
0x0063e20e str.Failed_get:__s
0x0063e2e4 str.Failed_reading_response_body:__s
0x0063e3af str.Got_response__d:__s__s
0x0063e49b str.version
0x0063e4ac str.HTTP_version
0x0063e566 str.
14974
bufio
bytes
compress/flate
compress/gzip
container/list
context
crypto
crypto/aes
crypto/cipher
crypto/des
crypto/dsa
crypto/ecdsa
crypto/ed25519
crypto/ed25519/internal/edwards25519
crypto/ed25519/internal/edwards25519/field
crypto/elliptic
crypto/elliptic/internal/fiat
crypto/elliptic/internal/nistec
crypto/hmac
crypto/internal/randutil
crypto/md5
crypto/rand
crypto/rc4
crypto/rsa
crypto/sha1
crypto/sha256
crypto/sha512
crypto/tls
crypto/x509
crypto/x509/pkix
encoding/asn1
encoding/base64
encoding/binary
encoding/hex
encoding/pem
errors
flag
fmt
golang.org/x/crypto/chacha20
golang.org/x/crypto/chacha20poly1305
golang.org/x/crypto/cryptobyte
golang.org/x/crypto/curve25519
golang.org/x/crypto/curve25519/internal/field
golang.org/x/crypto/hkdf
golang.org/x/crypto/internal/poly1305
golang.org/x/net/dns/dnsmessage
golang.org/x/net/http/httpguts
golang.org/x/net/http/httpproxy
golang.org/x/net/http2
golang.org/x/net/http2/hpack
golang.org/x/net/idna
golang.org/x/sys/cpu
golang.org/x/text/secure/bidirule
golang.org/x/text/transform
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
hash/crc32
internal/bytealg
internal/cpu
internal/fmtsort
internal/godebug
internal/intern
internal/itoa
internal/oserror
internal/poll
internal/reflectlite
internal/singleflight
internal/syscall/unix
internal/testlog
io
io/fs
io/ioutil
libc.so.6
log
math
math/big
math/rand
mime
mime/multipart
net
net/http
net/http/internal
net/http/internal/ascii
net/netip
net/textproto
net/url
os
path
path/filepath
reflect
runtime
runtime/debug
runtime/internal/atomic
runtime/internal/sys
runtime/internal/syscall
sort
strconv
strings
sync
sync/atomic
syscall
time
unicode
unicode/utf16
unicode/utf8
x_cgo_munmap
EOF
RUN

NAME=Resolve all symbols on a stripped linux go1.16 binary
FILE=bins/golang/example-server-1.16-stripped
CMDS=<<EOF
aalg
fl~sym.go.~?
pdfs @ main ~str.
izq~?
ilq
EOF
EXPECT=<<EOF
4657
0x0066d583 str.server.crt
0x0066d5f3 str.Reading_server_certificate:__s
0x0066d722 str.https:__localhost:8000
0x0066d77c str.Failed_get:__s
0x0066d863 str.Failed_reading_response_body:__s
0x0066d9a3 str.Got_response__d:__s__s
0x0066db8c str.version
0x0066dbaa str.HTTP_version
0x0066dc76 str.
0x0066e68d str.Addr
;-- str.flag:
14186
bufio
bytes
compress/flate
compress/gzip
container/list
context
crypto
crypto/aes
crypto/cipher
crypto/des
crypto/dsa
crypto/ecdsa
crypto/ed25519
crypto/ed25519/internal/edwards25519
crypto/elliptic
crypto/hmac
crypto/internal/randutil
crypto/md5
crypto/rand
crypto/rc4
crypto/rsa
crypto/sha1
crypto/sha256
crypto/sha512
crypto/tls
crypto/x509
crypto/x509/pkix
encoding/asn1
encoding/base64
encoding/binary
encoding/hex
encoding/pem
errors
flag
fmt
golang.org/x/crypto/chacha20
golang.org/x/crypto/chacha20poly1305
golang.org/x/crypto/cryptobyte
golang.org/x/crypto/curve25519
golang.org/x/crypto/hkdf
golang.org/x/crypto/poly1305
golang.org/x/net/dns/dnsmessage
golang.org/x/net/http/httpguts
golang.org/x/net/http/httpproxy
golang.org/x/net/http2
golang.org/x/net/http2/hpack
golang.org/x/net/idna
golang.org/x/sys/cpu
golang.org/x/text/secure/bidirule
golang.org/x/text/transform
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
hash/crc32
internal/bytealg
internal/cpu
internal/fmtsort
internal/oserror
internal/poll
internal/reflectlite
internal/singleflight
internal/syscall/unix
internal/testlog
io
io/fs
io/ioutil
libc.so.6
libpthread.so.0
log
math
math/big
math/rand
mime
mime/multipart
net
net/http
net/http/internal
net/textproto
net/url
os
path
path/filepath
reflect
runtime
runtime/debug
runtime/internal/atomic
runtime/internal/sys
sort
strconv
strings
sync
sync/atomic
syscall
time
unicode
unicode/utf16
unicode/utf8
EOF
RUN

NAME=Resolve all symbols on a stripped linux go1.12 binary
FILE=bins/golang/example-server-1.12-stripped
CMDS=<<EOF
aalg
fl~sym.go.~?
pdfs @ main ~str.
izq~?
ilq
EOF
EXPECT=<<EOF
5406
0x0065d876 str.server.crt
0x0065d8e0 str.Reading_server_certificate:__s
0x0065da03 str.https:__localhost:8000
0x0065da57 str.Failed_get:__s
0x0065db5a str.Failed_reading_response_body:__s
0x0065dca5 str.Got_response__d:__s__s
0x0065de6d str.version
0x0065de8a str.HTTP_version
0x0065dfe6 str.
15161
bufio
bytes
compress/flate
compress/gzip
container/list
context
crypto
crypto/aes
crypto/cipher
crypto/des
crypto/dsa
crypto/ecdsa
crypto/elliptic
crypto/hmac
crypto/internal/randutil
crypto/md5
crypto/rand
crypto/rc4
crypto/rsa
crypto/sha1
crypto/sha256
crypto/sha512
crypto/subtle
crypto/tls
crypto/x509
crypto/x509/pkix
encoding/asn1
encoding/base64
encoding/binary
encoding/hex
encoding/pem
errors
flag
fmt
go
golang.org/x/net/http/httpguts
golang.org/x/net/http2
golang.org/x/net/http2/hpack
golang.org/x/net/idna
golang.org/x/text/secure/bidirule
golang.org/x/text/transform
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
hash
hash/crc32
internal/bytealg
internal/cpu
internal/fmtsort
internal/poll
internal/singleflight
internal/syscall/unix
internal/testlog
internal/x/crypto/chacha20poly1305
internal/x/crypto/cryptobyte
internal/x/crypto/curve25519
internal/x/crypto/hkdf
internal/x/crypto/internal/chacha20
internal/x/crypto/poly1305
internal/x/net/dns/dnsmessage
internal/x/net/http/httpguts
internal/x/net/http/httpproxy
internal/x/net/http2/hpack
internal/x/net/idna
internal/x/text/secure/bidirule
internal/x/text/transform
internal/x/text/unicode/bidi
internal/x/text/unicode/norm
io
io/ioutil
libc.so.6
libpthread.so.0
log
math
math/big
math/rand
mime
mime/multipart
mime/quotedprintable
net
net/http
net/http/httptrace
net/http/internal
net/textproto
net/url
os
path
path/filepath
reflect
runtime
runtime/cgo
runtime/debug
runtime/internal/atomic
sort
strconv
strings
sync
sync/atomic
syscall
time
unicode
unicode/utf8
EOF
RUN

NAME=Resolve all symbols on a linux go1.16 binary (arm32)
FILE=bins/golang/btcctl-linux-armv7-v0.22.0-beta
CMDS=<<EOF
aalg
fl~sym.go.~?
pdfs @ main ~str.
izq~?
ilq
EOF
EXPECT=<<EOF
5124
0x00270aac str.Failed_to_read_data_from_stdin:__v
0x00270d70 str.s_command:__v
0x00270db8 str.1.0
0x002710ec str.Failed_to_unmarshal_result:__v
0x0027124c str.Failed_to_format_result:__v
0x00271338 str.PH2
0x0027140c str.s_command:__v__code:__s
0x002714b0 str.The___s__command_can_only_be_used_via_websockets
0x00271580 str.Unrecognized_command___s
0x00271608 str.No_command_specified
0x0027186c str.Chain_Server_Commands:DEBUG_HTTP2
0x0027187c str.Wallet_Server_Commands____wallet_:
0x00271ab4 str.PH2
0x00271bbc str.cannot_use__wallet_with__regtest__btcwallet_not_yet_compatible_with_regtest
0x00271e10 str.localhost
0x00272018 str.Use__s__h_to_show_options
0x002720ec str.btcwallet.conf
0x00272188 str.Error_creating_a_default_config_file:__v
0x00272618 str.s:_Multiple_network_params_can_t_be_used_together____choose_one
0x0027271c str.Error_parsing_config_file:__v
0x002727f8 str.btcd.conf
0x00272c0c str.m___s_rpcuser_____s
0x00272c60 str.m___s_rpcpass_____s
0x00272cb4 str.m___s_notls__0_1___:_s
0x00272e4c str.rpcuser__s_rpcpass__s
0x00272edc str.notls__s
0x00273460 str.http
0x0027347c str.:
0x00273514 str.POST
0x00273574 str.Content_Type
0x002735b4 str.application_json
0x0027373c str.error_reading_json_reply:__v
0x00273834 str.d__s
0x002738bc str.s
0x00273a58 str.https
0x00273b18 str.d._d._d
0x00273b50 str.beta
0x00273c20 str.s__s
0x00273d74 str.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
0x00273efc str.linux
0x00273f0c str.btcd
0x00273f50 str.linux
0x00273f60 str.btcctl
0x00273fa4 str.linux
0x00273fb4 str.btcwallet
0x0027401c str.btcctl.conf
0x00274090 str.rpc.cert
0x00274104 str.rpc.cert
15843
bufio
bytes
compress/flate
compress/gzip
compress/zlib
container/list
context
crypto
crypto/aes
crypto/cipher
crypto/des
crypto/dsa
crypto/ecdsa
crypto/ed25519
crypto/ed25519/internal/edwards25519
crypto/elliptic
crypto/hmac
crypto/internal/randutil
crypto/md5
crypto/rand
crypto/rc4
crypto/rsa
crypto/sha1
crypto/sha256
crypto/sha512
crypto/tls
crypto/x509
crypto/x509/pkix
encoding/asn1
encoding/base64
encoding/binary
encoding/hex
encoding/json
encoding/pem
errors
fmt
github.com/btcsuite/btcd/btcec
github.com/btcsuite/btcd/btcjson
github.com/btcsuite/btcd/chaincfg
github.com/btcsuite/btcd/chaincfg/chainhash
github.com/btcsuite/btcd/txscript
github.com/btcsuite/btcd/wire
github.com/btcsuite/btclog
github.com/btcsuite/btcutil
github.com/btcsuite/btcutil/base58
github.com/btcsuite/go-socks/socks
github.com/jessevdk/go-flags
golang.org/x/crypto/chacha20
golang.org/x/crypto/chacha20poly1305
golang.org/x/crypto/cryptobyte
golang.org/x/crypto/curve25519
golang.org/x/crypto/hkdf
golang.org/x/crypto/poly1305
golang.org/x/crypto/ripemd160
golang.org/x/net/dns/dnsmessage
golang.org/x/net/http/httpguts
golang.org/x/net/http/httpproxy
golang.org/x/net/http2/hpack
golang.org/x/net/idna
golang.org/x/text/secure/bidirule
golang.org/x/text/transform
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
hash/adler32
hash/crc32
internal/bytealg
internal/cpu
internal/fmtsort
internal/oserror
internal/poll
internal/reflectlite
internal/singleflight
internal/syscall/unix
internal/testlog
io
io/fs
io/ioutil
log
math
math/big
math/bits
math/rand
mime
mime/multipart
net
net/http
net/http/internal
net/textproto
net/url
os
os/user
path
path/filepath
reflect
regexp
regexp/syntax
runtime
runtime/debug
runtime/internal/atomic
sort
strconv
strings
sync
sync/atomic
syscall
time
unicode
unicode/utf16
unicode/utf8
EOF
RUN

NAME=Resolve all symbols on a linux go1.16 binary (arm64)
FILE=bins/golang/btcctl-linux-arm64-v0.22.0-beta
CMDS=<<EOF
aalg
fl~sym.go.~?
pdfs @ main ~str.
izq~?
EOF
EXPECT=<<EOF
5070
0x0026b000 str.s_command:__v
0x0026b04c str.1.0
0x0026b310 str.tls:_invalid_server_key_share
0x0026b314 str.Failed_to_unmarshal_result:__v
0x0026b444 str.Failed_to_format_result:__v
0x0026b5dc str.s_command:__v__code:__s
0x0026b730 str.Failed_to_read_data_from_stdin:__v
0x0026b884 str.Not_enough_lines_provided_on_stdin
0x0026b998 str.The___s__command_can_only_be_used_via_websockets
0x0026b9d0 str.Specify__l_to_list_available_commands
0x0026ba70 str.Unrecognized_command___s
0x0026baa8 str.Specify__l_to_list_available_commands
0x0026bb00 str.No_command_specified
0x0026bc28 str.Chain_Server_Commands:DEBUG_HTTP2
0x0026bc3c str.Wallet_Server_Commands____wallet_:
0x0026bf1c str.testnet3
0x0026bf40 str.18334
0x0026c030 str.simnet
0x0026c054 str.18556
0x0026c064 str.regtest
0x0026c084 str.18334
0x0026c090 str.cannot_use__wallet_with__regtest__btcwallet_not_yet_compatible_with_regtest
0x0026c100 str.8334
0x0026c2c8 str.localhost
0x0026c2d0 str.localhost
0x0026c520 str.Use__s__h_to_show_options
0x0026c5f4 str.btcwallet.conf
0x0026c688 str.Error_creating_a_default_config_file:__v
0x0026c8ac str.testnet3
0x0026c8b4 str.mainnet
0x0026c8c4 str.simnet
0x0026c8d4 str.regtest
0x0026cad4 str.loadConfig
0x0026cae0 str.profilealloc_called_without_a_P_or_outside_bootstrapping
0x0026cae4 str.s:_Multiple_network_params_can_t_be_used_together____choose_one
0x0026cbd0 str.tls:_invalid_server_key_share
0x0026cbd4 str.Error_parsing_config_file:__v
0x0026ccb8 str.btcd.conf
0x0026cd6c str.version
0x0026cec4 str.The_special_parameter_____indicates_that_a_parameter_should_be_read_from_the_next_unread_line_from_standard_input.
0x0026d0a8 str.m___s_rpcuser_____s
0x0026d0fc str.m___s_rpcpass_____s
0x0026d150 str.m___s_notls__0_1___:_s
0x0026d2e0 str.rpcuser__s_rpcpass__s
0x0026d368 str.notls__s
0x0026d900 str.http
0x0026d908 str.https
0x0026d90c str.http
0x0026d928 str.:
0x0026d9c4 str.POST
0x0026da28 str.Content_Type
0x0026da70 str.application_json
0x0026dbe8 str.error_reading_json_reply:__v
0x0026dcec str.d__s
0x0026dd70 str.s
0x0026df84 str.d._d._d
0x0026dfc0 str.beta
0x0026e0a0 str.s__s
0x0026e1dc str.profilealloc_called_without_a_P_or_outside_bootstrapping
0x0026e1e0 str.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
0x0026e370 str.linux
0x0026e384 str.btcd
0x0026e3d0 str.linux
0x0026e3e4 str.btcctl
0x0026e430 str.linux
0x0026e444 str.btcwallet
0x0026e4b8 str.btcctl.conf
0x0026e53c str.rpc.cert
0x0026e5c0 str.rpc.cert
16166
EOF
RUN

NAME=Resolve all symbols on a stripped mach0 go1.18 binary (arm64)
FILE=bins/golang/hello.mach0.stripped
CMDS=<<EOF
aalg
fl~sym.go.~?
pdfs @ sym.go.runtime.panicwrap ~str.
izq~?
izq~ slice bounds out of range
iI~compiler
ilq
EOF
EXPECT=<<EOF
1429
0x100006dd8 str.value_method
0x100006e48 str.called_using_nil
0x100006e64 str.pointer
0x100006eac str.panicwrap:_no___in
0x1000076d0 str.internal_error___misuse_of_itab
1709
0x10008bada 31 31 slice bounds out of range [:%x]
0x10008babb 31 31 slice bounds out of range [%x:]
0x10008be19 32 32 slice bounds out of range [::%x]
0x10008bdf9 32 32 slice bounds out of range [:%x:]
0x10008bdd9 32 32 slice bounds out of range [%x::]
0x10008dbfa 46 46 slice bounds out of range [:%x] with length %y
0x10008ddcf 48 48 slice bounds out of range [:%x] with capacity %y
0x10008c235 33 33 slice bounds out of range [%x:%y]
0x10008dd40 47 47 slice bounds out of range [::%x] with length %y
0x10008dfe8 49 49 slice bounds out of range [::%x] with capacity %y
0x10008c5a0 34 34 slice bounds out of range [:%x:%y]
0x10008c57e 34 34 slice bounds out of range [%x:%y:]
0x10008a871 25 25 slice bounds out of range
compiler go1.18 (cmd -compiler=gc CGO_ENABLED=1 CGO_CFLAGS= CGO_CPPFLAGS= CGO_CXXFLAGS= CGO_LDFLAGS= GOARCH=arm64 GOOS=darwin)
/usr/lib/libSystem.B.dylib
errors
fmt
go
internal/bytealg
internal/cpu
internal/fmtsort
internal/itoa
internal/oserror
internal/poll
internal/reflectlite
internal/syscall/unix
internal/testlog
io
io/fs
os
path
reflect
runtime
runtime/debug
sort
strconv
sync
sync/atomic
syscall
time
unicode
unicode/utf8
EOF
RUN

NAME=Resolve all symbols on a stripped PE go1.12 binary (x64)
FILE=bins/golang/hello_go_strip.exe
CMDS=<<EOF
aalg
fl~sym.go.~?
pdfs @ main ~str.
izq~?
iI~compiler
ilq
EOF
EXPECT=<<EOF
1788
0x004a699b str.hello__hacktivity
9222
compiler go1.15
errors
fmt
go
internal/bytealg
internal/cpu
internal/fmtsort
internal/oserror
internal/poll
internal/reflectlite
internal/syscall/windows
internal/syscall/windows/registry
internal/syscall/windows/sysdll
io
kernel32.dll
math
os
reflect
runtime
runtime/debug
runtime/internal/atomic
runtime/internal/sys
sort
strconv
sync
sync/atomic
syscall
time
unicode
unicode/utf16
unicode/utf8
EOF
RUN

NAME=Parse Golang 1.18 BuildInfo ELF
FILE=bins/golang/GoReSym_118_tip_stripped
CMDS=iI~compiler
EXPECT=<<EOF
compiler devel go1.18-2d1d548 Tue Dec 21 03:55:43 2021 +0000 (path github.com/stevemk14ebr/GoReSym mod github.com/stevemk14ebr/GoReSym (devel)  dep golang.org/x/arch v0.0.0-20201008161808-52c3e6f60cff h1:XmKBi9R6duxOB3lfc72wyrwiOY7X2Jl1wuI+RFOyMDE= -compiler=gc -ldflags=-s -w CGO_ENABLED=1 CGO_CFLAGS= CGO_CPPFLAGS= CGO_CXXFLAGS= CGO_LDFLAGS= GOARCH=amd64 GOOS=linux GOAMD64=v1 vcs=git vcs.revision=4bd670890aee5a14e36be1a72d19ca8573f2433b vcs.time=2021-12-06T17:40:21Z vcs.modified=true)
EOF
RUN


NAME=Parse Golang 1.18 MIPS BE Strings
FILE=bins/golang/go-re-sample-linux-mips
CMDS=<<EOF
aalg
s main
e asm.cmt.col=0
pdr~"
EOF
EXPECT=<<EOF
| 0x000be5ec      lui   v1, 0xd ; 0xd3417 ; "foogc gp in intmapnilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomChamDashGOGC"
| 0x000be670      lui   at, 0xd ; 0xd3860 ; "enableerrno objectselectstringstructsweep sysmontimersuint16uint32uint64  name:  tail: (scan  (scan) MB in  Value> allocs dying="
| 0x000be6a8      lui   v1, 0xd ; 0xd3503 ; "nameprofroots + sbrktrueuint  -%s ...\n MB,  and  max= ms,  ptr  tab= top=(nil), fp:1562578125<nil>AdlamBamumBatakBuhidDograErro"
| 0x000be700      lui   v0, 0xd ; 0xd340e ; "barendfinfoogc gp in intmapnilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomCha"
| 0x000be784      lui   at, 0xd ; 0xd360f ; "levellink lo   mheappanicpc   r0   r1   r10  r11  r12  r13  r14  r15  r16  r17  r18  r19  r2   r20  r21  r22  r23  r24  r25  r26"
| 0x000be7dc      lui   v0, 0xf ; 0xd914e ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
| 0x000be8e4      lui   v0, 0xf ; 0xd54fc ; "subcommand 'bar'subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABC"
| 0x000be940      lui   v0, 0xf ; 0xd3aae ; "  level: bytes,  etypes  is not  maxpc=  mcount= minLC=  minutes nalloc= newval= nfreed= pointer stack=[ status ) errno=48828125"
| 0x000be9d4      lui   a0, 0xf ; 0xd38af ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x000beab8      lui   v0, 0xf ; 0xd550c ; "subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABCDEFX0123456789ab"
| 0x000beb14      lui   v0, 0xf ; 0xd3ca6 ; "  enable: (forced) B exp.)  B work ( blocked= in use)\n lockedg= lockedm= m->curg= marked   method:  ms cpu,  not in [ runtime= "
| 0x000beb9c      lui   v0, 0xf ; 0xd38a8 ; "  name:  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=,"
| 0x000bec38      lui   a0, 0xf ; 0xd38af ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x000becbc      lui   at, 0xf ; 0xd914e ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
EOF
RUN

NAME=Parse Golang 1.18 MIPS LE Strings
FILE=bins/golang/go-re-sample-linux-mipsle
CMDS=<<EOF
aalg
s main
e asm.cmt.col=0
pdr~"
EOF
EXPECT=<<EOF
| 0x000be5d0      lui   v1, 0xd ; 0xd3416 ; "foogc gp in intmapnilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomChamDashGOGC"
| 0x000be654      lui   at, 0xd ; 0xd385f ; "enableerrno objectselectstringstructsweep sysmontimersuint16uint32uint64  name:  tail: (scan  (scan) MB in  Value> allocs dying="
| 0x000be68c      lui   v1, 0xd ; 0xd3502 ; "nameprofroots + sbrktrueuint  -%s ...\n MB,  and  max= ms,  ptr  tab= top=(nil), fp:1562578125<nil>AdlamBamumBatakBuhidDograErro"
| 0x000be6e4      lui   v0, 0xd ; 0xd340d ; "barendfinfoogc gp in intmapnilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomCha"
| 0x000be768      lui   at, 0xd ; 0xd360e ; "levellink lo   mheappanicpc   r0   r1   r10  r11  r12  r13  r14  r15  r16  r17  r18  r19  r2   r20  r21  r22  r23  r24  r25  r26"
| 0x000be7c0      lui   v0, 0xf ; 0xd914d ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
| 0x000be8c8      lui   v0, 0xf ; 0xd54fb ; "subcommand 'bar'subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABC"
| 0x000be924      lui   v0, 0xf ; 0xd3aad ; "  level: bytes,  etypes  is not  maxpc=  mcount= minLC=  minutes nalloc= newval= nfreed= pointer stack=[ status ) errno=48828125"
| 0x000be9b8      lui   a0, 0xf ; 0xd38ae ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x000bea9c      lui   v0, 0xf ; 0xd550b ; "subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABCDEFX0123456789ab"
| 0x000beaf8      lui   v0, 0xf ; 0xd3ca5 ; "  enable: (forced) B exp.)  B work ( blocked= in use)\n lockedg= lockedm= m->curg= marked   method:  ms cpu,  not in [ runtime= "
| 0x000beb7c      lui   v0, 0xf ; 0xd38a7 ; "  name:  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=,"
| 0x000bec18      lui   a0, 0xf ; 0xd38ae ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x000bec9c      lui   at, 0xf ; 0xd914d ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
EOF
RUN

NAME=Parse Golang 1.18 MIPS64 BE Strings
FILE=bins/golang/go-re-sample-linux-mips64
CMDS=<<EOF
aalg
s main
e asm.cmt.col=0
pdr~"
EOF
EXPECT=<<EOF
| 0x000c0378      lui   v1, 0xe ; 0xe7d69 ; "foogc gp in intmapmsanilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomChamDashG"
| 0x000c040c      lui   at, 0xf ; 0xe81b6 ; "enableerrno objectselectstringstructsweep sysmontimersuint16uint32uint64  name:  tail: (scan  (scan) MB in  Value> allocs dying="
| 0x000c0448      lui   v1, 0xe ; 0xe7e54 ; "nameprofroots + sbrktrueuint  -%s ...\n MB,  and  cnt= max= ms,  ptr  tab= top=(nil), fp:1562578125<nil>AdlamBamumBatakBuhidDogr"
| 0x000c04a8      lui   v0, 0xe ; 0xe7d60 ; "barendfinfoogc gp in intmapmsanilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=Ahom"
| 0x000c053c      lui   at, 0xe ; 0xe7f65 ; "levellink lo   mheappanicpc   r0   r1   r10  r11  r12  r13  r14  r15  r16  r17  r18  r19  r2   r20  r21  r22  r23  r24  r25  r26"
| 0x000c05a0      lui   v0, 0x11 ; 0xedacb ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
| 0x000c06c4      lui   v0, 0x11 ; 0xe9e6b ; "subcommand 'bar'subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABC"
| 0x000c0730      lui   v0, 0x11 ; 0xe8404 ; "  level: bytes,  etypes  is not  maxpc=  mcount= minLC=  minutes nalloc= newval= nfreed= packed= pointer stack=[ status ) errno="
| 0x000c07dc      lui   at, 0x11 ; 0xe8205 ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x000c08d8      lui   v0, 0x11 ; 0xe9e7b ; "subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABCDEFX0123456789ab"
| 0x000c0944      lui   v0, 0x11 ; 0xe8604 ; "  enable: (forced) -> node= B exp.)  B work ( blocked= in use)\n lockedg= lockedm= m->curg= marked   method:  ms cpu,  not in [ "
| 0x000c09e4      lui   v0, 0x11 ; 0xe81fe ; "  name:  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=,"
| 0x000c0a98      lui   at, 0x11 ; 0xe8205 ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x000c0b34      lui   at, 0x11 ; 0xedacb ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
EOF
RUN

NAME=Parse Golang 1.18 MIPS64 LE Strings
FILE=bins/golang/go-re-sample-linux-mips64le
CMDS=<<EOF
aalg
s main
e asm.cmt.col=0
pdr~"
EOF
EXPECT=<<EOF
| 0x000c0360      lui   v1, 0xe ; 0xe7d6b ; "foogc gp in intmapmsanilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomChamDashG"
| 0x000c03f4      lui   at, 0xf ; 0xe81b8 ; "enableerrno objectselectstringstructsweep sysmontimersuint16uint32uint64  name:  tail: (scan  (scan) MB in  Value> allocs dying="
| 0x000c0430      lui   v1, 0xe ; 0xe7e56 ; "nameprofroots + sbrktrueuint  -%s ...\n MB,  and  cnt= max= ms,  ptr  tab= top=(nil), fp:1562578125<nil>AdlamBamumBatakBuhidDogr"
| 0x000c0490      lui   v0, 0xe ; 0xe7d62 ; "barendfinfoogc gp in intmapmsanilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=Ahom"
| 0x000c0524      lui   at, 0xe ; 0xe7f67 ; "levellink lo   mheappanicpc   r0   r1   r10  r11  r12  r13  r14  r15  r16  r17  r18  r19  r2   r20  r21  r22  r23  r24  r25  r26"
| 0x000c0588      lui   v0, 0x11 ; 0xedacd ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
| 0x000c06ac      lui   v0, 0x11 ; 0xe9e6d ; "subcommand 'bar'subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABC"
| 0x000c0718      lui   v0, 0x11 ; 0xe8406 ; "  level: bytes,  etypes  is not  maxpc=  mcount= minLC=  minutes nalloc= newval= nfreed= packed= pointer stack=[ status ) errno="
| 0x000c07c4      lui   at, 0x11 ; 0xe8207 ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x000c08c0      lui   v0, 0x11 ; 0xe9e7d ; "subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABCDEFX0123456789ab"
| 0x000c092c      lui   v0, 0x11 ; 0xe8606 ; "  enable: (forced) -> node= B exp.)  B work ( blocked= in use)\n lockedg= lockedm= m->curg= marked   method:  ms cpu,  not in [ "
| 0x000c09c8      lui   v0, 0x11 ; 0xe8200 ; "  name:  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=,"
| 0x000c0a7c      lui   at, 0x11 ; 0xe8207 ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x000c0b18      lui   at, 0x11 ; 0xedacd ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
EOF
RUN

NAME=Parse Golang 1.18 PPC64 BE Strings
FILE=bins/golang/go-re-sample-linux-ppc64
CMDS=<<EOF
aalg
s main
e asm.cmt.col=0
pdr~"
EOF
EXPECT=<<EOF
| 0x00099f7c      lis   r5, 0xb ; 0xb7d3f ; "foogc gp in intmapnilobjpc=ptrscv\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomChamDashG"
| 0x00099fec      lis   r4, 0xc ; 0xb8198 ; "enableerrno objectpower9selectstringstructsweep sysmontimersuint16uint32uint64  name:  tail: (scan  (scan) MB in  Value> allocs "
| 0x0009a00c      lis   r4, 0xb ; go-re-sample.go:12 ; 0xb7e32 ; "nameprofroots + sbrktrueuint  -%s ...\n MB,  and  cnt= max= ms,  ptr  tab= top=(nil), fp:1562578125<nil>AdlamBamumBatakBuhidDogr"
| 0x0009a050      lis   r9, 0xb ; 0xb7d36 ; "barendfinfoogc gp in intmapnilobjpc=ptrscv\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=Ahom"
| 0x0009a0c0      lis   r4, 0xb ; 0xb7f48 ; "levellink mheappanicpc   r0   r1   r10  r11  r12  r13  r14  r15  r16  r17  r18  r19  r2   r20  r21  r22  r23  r24  r25  r26  r27"
| 0x0009a108      lis   r9, 0xd ; 0xbd867 ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
| 0x0009a1cc      lis   r8, 0xd ; 0xb9bf0 ; "subcommand 'bar'subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABC"
| 0x0009a218      lis   r8, 0xd ; 0xb83ec ; "  level: bytes,  etypes  is not  maxpc=  mcount= minLC=  minutes nalloc= newval= nfreed= packed= pointer stack=[ status ) errno="
| 0x0009a290      lis   r7, 0xd ; 0xb81ed ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x0009a330      lis   r8, 0xd ; 0xb9c00 ; "subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABCDEFX0123456789ab"
| 0x0009a37c      lis   r8, 0xd ; 0xb85f0 ; "  enable: (forced) -> node= B exp.)  B work ( blocked= in use)\n lockedg= lockedm= m->curg= marked   method:  ms cpu,  not in [ "
| 0x0009a3f4      lis   r8, 0xd ; 0xb81e6 ; "  name:  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=,"
| 0x0009a470      lis   r7, 0xd ; 0xb81ed ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x0009a4cc      lis   r8, 0xd ; 0xbd867 ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
EOF
RUN

NAME=Parse Golang 1.18 PPC64 LE Strings
FILE=bins/golang/go-re-sample-linux-ppc64le
CMDS=<<EOF
aalg
s main
e asm.cmt.col=0
pdr~"
EOF
EXPECT=<<EOF
| 0x00099eac      lis   r5, 0xb ; 0xb7d60 ; "foogc gp in intmapnilobjpc=ptrscv\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomChamDashG"
| 0x00099f1c      lis   r4, 0xc ; 0xb81b9 ; "enableerrno objectpower9selectstringstructsweep sysmontimersuint16uint32uint64  name:  tail: (scan  (scan) MB in  Value> allocs "
| 0x00099f3c      lis   r4, 0xb ; go-re-sample.go:12 ; 0xb7e53 ; "nameprofroots + sbrktrueuint  -%s ...\n MB,  and  cnt= max= ms,  ptr  tab= top=(nil), fp:1562578125<nil>AdlamBamumBatakBuhidDogr"
| 0x00099f80      lis   r9, 0xb ; 0xb7d57 ; "barendfinfoogc gp in intmapnilobjpc=ptrscv\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=Ahom"
| 0x00099ff0      lis   r4, 0xb ; 0xb7f69 ; "levellink mheappanicpc   r0   r1   r10  r11  r12  r13  r14  r15  r16  r17  r18  r19  r2   r20  r21  r22  r23  r24  r25  r26  r27"
| 0x0009a038      lis   r9, 0xd ; 0xbd845 ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
| 0x0009a0f0      lis   r8, 0xd ; 0xb9bf3 ; "subcommand 'bar'subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABC"
| 0x0009a13c      lis   r8, 0xd ; 0xb840d ; "  level: bytes,  etypes  is not  maxpc=  mcount= minLC=  minutes nalloc= newval= nfreed= packed= pointer stack=[ status ) errno="
| 0x0009a1b4      lis   r7, 0xd ; 0xb820e ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x0009a248      lis   r8, 0xd ; 0xb9c03 ; "subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABCDEFX0123456789ab"
| 0x0009a294      lis   r8, 0xd ; 0xb8610 ; "  enable: (forced) -> node= B exp.)  B work ( blocked= in use)\n lockedg= lockedm= m->curg= marked   method:  ms cpu,  not in [ "
| 0x0009a308      lis   r8, 0xd ; 0xb8207 ; "  name:  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=,"
| 0x0009a384      lis   r7, 0xd ; 0xb820e ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x0009a3e0      lis   r8, 0xd ; 0xbd845 ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
EOF
RUN

NAME=Parse Golang 1.18 riscv64 Strings
FILE=bins/golang/go-re-sample-linux-riscv64
CMDS=<<EOF
aalg
s main
e asm.cmt.col=0
pdr~"
EOF
EXPECT=<<EOF
| 0x00099898      auipc t2, 0x1e ; 0xb7b60 ; "foogc gp in intmapnilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomChamDashGOGC"
| 0x00099910      auipc t0, 0x1e ; 0xb7f74 ; "enableerrno objectselectstringstructsweep sysmontimersuint16uint32uint64  name:  tail: (scan  (scan) MB in  Value> allocs dying="
| 0x00099944      auipc t2, 0x1e ; 0xb7c70 ; "namepc  profra  roots + s0  s1  s10 s11 s2  s3  s4  s5  s6  s7  s8  s9  sbrksp  t0  t1  t2  t3  t4  t5  t6  tp  trueuint  -%s .."
| 0x00099998      auipc t2, 0x1e ; 0xb7b57 ; "barendfinfoogc gp in intmapnilobjpc=ptr\u00b5s\u03bcs <== at  fp= is  lr: of  on  pc= sp: sp=) = ) m=+Inf,r2=-Inf3125: p=AhomCha"
| 0x00099a10      auipc t0, 0x1e ; 0xb7dd8 ; "levelmheappanicscav schedsleepslicesudogsweeptracetrap:uint8valuewrite B ->  Value addr= alloc base  code= ctxt: curg= free  goi"
| 0x00099a60      auipc t1, 0x3e ; 0xbd602 ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
| 0x00099b4c      auipc t1, 0x3e ; 0xb99cd ; "subcommand 'bar'subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABC"
| 0x00099ba4      auipc t1, 0x3e ; 0xb81c2 ; "  level: bytes,  etypes  is not  maxpc=  mcount= minLC=  minutes nalloc= newval= nfreed= packed= pointer stack=[ status ) errno="
| 0x00099c30      auipc s0, 0x3e ; 0xb7fc3 ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x00099cf8      auipc t1, 0x3e ; 0xb99dd ; "subcommand 'foo'time: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABCDEFX0123456789ab"
| 0x00099d50      auipc t1, 0x3e ; 0xb83c2 ; "  enable: (forced) -> node= B exp.)  B work ( blocked= in use)\n lockedg= lockedm= m->curg= marked   method:  ms cpu,  not in [ "
| 0x00099dd0      auipc t1, 0x3e ; 0xb7fbc ; "  name:  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=,"
| 0x00099e64      auipc s0, 0x3e ; 0xb7fc3 ; "  tail: (scan  (scan) MB in  Value> allocs dying= locks= m->g0= nmsys= pad1=  pad2=  s=nil\n text=  zombie% CPU ((PANIC=, goid=,"
| 0x00099edc      auipc t0, 0x3e ; 0xbd602 ; "expected 'foo' or 'bar' subcommandsfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not poi"
EOF
RUN

NAME=Resolve all symbols on a stripped windows go1.21 binary
FILE=bins/golang/go-re-sample-windows-amd64-go121.exe
CMDS=<<EOF
aalg
fl~sym.go.~?
pdfs @ main ~str.
izq~?
EOF
EXPECT=<<EOF
1604
0x00490237 str.foo
0x00490292 str.enable
0x004902a0 str.enable
0x004902b0 str.name
0x004902c0 str.name
0x004902f2 str.bar
0x0049034d str.level
0x0049035b str.level
0x00490448 str.subcommand__bar
0x00490495 str.level:
0x0049051d str.tail:
0x004905c2 str.subcommand__foo
0x00490615 str.enable:
0x00490692 str.name:
0x0049071e str.tail:
0x00490780 str.expected__foo__or__bar__subcommands
20633
EOF
RUN

NAME=Resolve all symbols on a stripped linux go1.21 binary
FILE=bins/golang/go-re-sample-linux-amd64-go121
CMDS=<<EOF
aalg
fl~sym.go.~?
pdfs @ main ~str.
izq~?
EOF
EXPECT=<<EOF
1587
0x004875b7 str.foo
0x00487612 str.enable
0x00487620 str.enable
0x00487630 str.name
0x00487640 str.name
0x00487672 str.bar
0x004876cd str.level
0x004876db str.level
0x004877c8 str.subcommand__bar
0x00487815 str.level:
0x0048789d str.tail:
0x00487942 str.subcommand__foo
0x00487995 str.enable:
0x00487a12 str.name:
0x00487a9e str.tail:
0x00487b00 str.expected__foo__or__bar__subcommands
3616
EOF
RUN
