mirror of
https://github.com/rizinorg/rizin.git
synced 2026-10-12 02:21:57 +00:00
feat(analysis): implement Golang ABI calling conventions and prologue voting
- Define golang (ABIInternal) and golang_abi0 calling conventions in SDB for x86-64, ARM64, and x86-32 - Implement statistical prologue voting heuristic across sampled Go functions to automatically distinguish ABIInternal from ABI0 on stripped/obfuscated binaries - Automatically assign detected Go calling convention to recovered sym.go.* functions - Filter compiler-generated wrapper symbols (.abi0, .abiinternal, ..inittask, type:*) from deep function analysis - Linked to rz-ghidra PR for SLEIGH decompiler prototype integration
This commit is contained in:
@@ -27,3 +27,25 @@ cc.swift.maxargs=8
|
||||
cc.swift.self=x20
|
||||
cc.swift.error=x21
|
||||
cc.swift.ret=x0
|
||||
|
||||
golang=cc
|
||||
cc.golang.arg0=x0
|
||||
cc.golang.arg1=x1
|
||||
cc.golang.arg2=x2
|
||||
cc.golang.arg3=x3
|
||||
cc.golang.arg4=x4
|
||||
cc.golang.arg5=x5
|
||||
cc.golang.arg6=x6
|
||||
cc.golang.arg7=x7
|
||||
cc.golang.arg8=x8
|
||||
cc.golang.arg9=x9
|
||||
cc.golang.arg10=x10
|
||||
cc.golang.arg11=x11
|
||||
cc.golang.arg12=x12
|
||||
cc.golang.arg13=x13
|
||||
cc.golang.arg14=x14
|
||||
cc.golang.arg15=x15
|
||||
cc.golang.argn=stack
|
||||
cc.golang.maxargs=16
|
||||
cc.golang.self=x28
|
||||
cc.golang.ret=x0
|
||||
|
||||
@@ -49,3 +49,8 @@ cc.watcom.maxargs=4
|
||||
pascal=cc
|
||||
cc.pascal.argn=stack_rev
|
||||
cc.pascal.maxargs=0
|
||||
|
||||
golang=cc
|
||||
cc.golang.argn=stack
|
||||
cc.golang.maxargs=0
|
||||
cc.golang.ret=eax
|
||||
|
||||
@@ -50,3 +50,23 @@ cc.amd64syscall.arg4=r8
|
||||
cc.amd64syscall.arg5=r9
|
||||
cc.amd64syscall.maxargs=6
|
||||
cc.amd64syscall.ret=rax
|
||||
|
||||
golang=cc
|
||||
cc.golang.arg0=rax
|
||||
cc.golang.arg1=rbx
|
||||
cc.golang.arg2=rcx
|
||||
cc.golang.arg3=rdi
|
||||
cc.golang.arg4=rsi
|
||||
cc.golang.arg5=r8
|
||||
cc.golang.arg6=r9
|
||||
cc.golang.arg7=r10
|
||||
cc.golang.arg8=r11
|
||||
cc.golang.argn=stack
|
||||
cc.golang.maxargs=9
|
||||
cc.golang.ret=rax
|
||||
cc.golang.self=r14
|
||||
|
||||
golang_abi0=cc
|
||||
cc.golang_abi0.argn=stack
|
||||
cc.golang_abi0.maxargs=0
|
||||
cc.golang_abi0.ret=rax
|
||||
|
||||
@@ -45,7 +45,7 @@ struct.runtime.iface.data=void*,4,0
|
||||
|
||||
hmap=struct
|
||||
struct.hmap=count,flags,B,noverflow,hash0,buckets,oldbuckets,nevacuate,extra
|
||||
struct.hmap.count=int,0,0
|
||||
struct.hmap.count=int32_t,0,0
|
||||
struct.hmap.flags=uint8_t,4,0
|
||||
struct.hmap.B=uint8_t,5,0
|
||||
struct.hmap.noverflow=uint16_t,6,0
|
||||
@@ -57,7 +57,7 @@ struct.hmap.extra=void*,24,0
|
||||
|
||||
runtime.hmap=struct
|
||||
struct.runtime.hmap=count,flags,B,noverflow,hash0,buckets,oldbuckets,nevacuate,extra
|
||||
struct.runtime.hmap.count=int,0,0
|
||||
struct.runtime.hmap.count=int32_t,0,0
|
||||
struct.runtime.hmap.flags=uint8_t,4,0
|
||||
struct.runtime.hmap.B=uint8_t,5,0
|
||||
struct.runtime.hmap.noverflow=uint16_t,6,0
|
||||
|
||||
@@ -45,7 +45,7 @@ struct.runtime.iface.data=void*,8,0
|
||||
|
||||
hmap=struct
|
||||
struct.hmap=count,flags,B,noverflow,hash0,buckets,oldbuckets,nevacuate,extra
|
||||
struct.hmap.count=int,0,0
|
||||
struct.hmap.count=int64_t,0,0
|
||||
struct.hmap.flags=uint8_t,8,0
|
||||
struct.hmap.B=uint8_t,9,0
|
||||
struct.hmap.noverflow=uint16_t,10,0
|
||||
@@ -57,7 +57,7 @@ struct.hmap.extra=void*,40,0
|
||||
|
||||
runtime.hmap=struct
|
||||
struct.runtime.hmap=count,flags,B,noverflow,hash0,buckets,oldbuckets,nevacuate,extra
|
||||
struct.runtime.hmap.count=int,0,0
|
||||
struct.runtime.hmap.count=int64_t,0,0
|
||||
struct.runtime.hmap.flags=uint8_t,8,0
|
||||
struct.runtime.hmap.B=uint8_t,9,0
|
||||
struct.runtime.hmap.noverflow=uint16_t,10,0
|
||||
|
||||
+129
-5
@@ -512,12 +512,125 @@ static ut32 core_recover_golang_functions_go_1_2(RzCore *core, GoPcLnTab *pclnta
|
||||
return num_syms;
|
||||
}
|
||||
|
||||
static bool analyse_golang_symgo_function(RzFlagItem *fi, void *user) {
|
||||
RzCore *core = (RzCore *)user;
|
||||
rz_core_analysis_fcn(core, fi->offset, UT64_MAX, RZ_ANALYSIS_XREF_TYPE_NULL, 1);
|
||||
#define GO_ABI_PROLOGUE_WINDOW 24
|
||||
#define GO_ABI_MAX_SAMPLES 512
|
||||
|
||||
/**
|
||||
* \brief Checks if a Go symbol is compiler boilerplate (ABI wrappers, closures, inittasks).
|
||||
*/
|
||||
static bool rz_golang_is_compiler_wrapper_symbol(const char *name) {
|
||||
if (RZ_STR_ISEMPTY(name)) {
|
||||
return true;
|
||||
}
|
||||
if (!strncmp(name, "sym.go.", 7)) {
|
||||
name += 7;
|
||||
}
|
||||
return strstr(name, ".abi0") ||
|
||||
strstr(name, ".abiinternal") ||
|
||||
strstr(name, ".deferwrap") ||
|
||||
strstr(name, "..inittask") ||
|
||||
!strncmp(name, "type:", 5) ||
|
||||
!strncmp(name, "go:", 3);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Sample a function's prologue to vote on register ABI (R14 holds g) vs stack ABI (g from TLS).
|
||||
*/
|
||||
static void rz_golang_vote_abi_prologue(RzIO *io, ut64 func_addr, ut32 *reg_votes, ut32 *stack_votes) {
|
||||
ut8 code[GO_ABI_PROLOGUE_WINDOW + 8] = { 0 };
|
||||
if (0 > rz_io_nread_at(io, func_addr, code, sizeof(code))) {
|
||||
return;
|
||||
}
|
||||
for (ut32 k = 0; k <= GO_ABI_PROLOGUE_WINDOW; k++) {
|
||||
// 49 3B 66 10 / 4D 3B 66 10 (CMPQ SP|R12, 16(R14)) -> Register ABI (R14 holds g)
|
||||
if ((code[k] == 0x49 || code[k] == 0x4d) && code[k + 1] == 0x3b && code[k + 2] == 0x66 && code[k + 3] == 0x10) {
|
||||
(*reg_votes)++;
|
||||
return;
|
||||
}
|
||||
// 64|65 48|4C 8B /r with SIB 0x25 (MOVQ FS|GS:[disp32], reg) -> Stack ABI (g loaded from TLS)
|
||||
if ((code[k] == 0x64 || code[k] == 0x65) && (code[k + 1] == 0x48 || code[k + 1] == 0x4c) && code[k + 2] == 0x8b &&
|
||||
(code[k + 3] & 0xc7) == 0x04 && code[k + 4] == 0x25) {
|
||||
(*stack_votes)++;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
RzCore *core;
|
||||
ut32 samples_count;
|
||||
ut32 reg_votes;
|
||||
ut32 stack_votes;
|
||||
} GolangVoteCtx;
|
||||
|
||||
static bool rz_golang_sample_flag_for_abi(RzFlagItem *fi, void *user) {
|
||||
GolangVoteCtx *ctx = (GolangVoteCtx *)user;
|
||||
if (rz_golang_is_compiler_wrapper_symbol(fi->name)) {
|
||||
return true;
|
||||
}
|
||||
if (ctx->samples_count >= GO_ABI_MAX_SAMPLES) {
|
||||
return false;
|
||||
}
|
||||
ctx->samples_count++;
|
||||
rz_golang_vote_abi_prologue(ctx->core->io, fi->offset, &ctx->reg_votes, &ctx->stack_votes);
|
||||
return true;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
RzCore *core;
|
||||
const char *cc;
|
||||
} GolangAnalyseCtx;
|
||||
|
||||
static bool analyse_golang_symgo_function(RzFlagItem *fi, void *user) {
|
||||
GolangAnalyseCtx *ctx = (GolangAnalyseCtx *)user;
|
||||
RzCore *core = ctx->core;
|
||||
|
||||
if (rz_golang_is_compiler_wrapper_symbol(fi->name)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
rz_core_analysis_fcn(core, fi->offset, UT64_MAX, RZ_ANALYSIS_XREF_TYPE_NULL, 1);
|
||||
|
||||
if (ctx->cc) {
|
||||
RzAnalysisFunction *fcn = rz_analysis_get_function_at(core->analysis, fi->offset);
|
||||
if (fcn) {
|
||||
fcn->cc = ctx->cc;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static const char *golang_detect_cc(RzCore *core, const RzSpace *symbols) {
|
||||
const char *asm_arch = rz_config_get(core->config, "asm.arch");
|
||||
ut32 asm_bits = rz_config_get_i(core->config, "asm.bits");
|
||||
|
||||
if (RZ_STR_ISEMPTY(asm_arch) || asm_bits == 32 || strcmp(asm_arch, "x86") != 0) {
|
||||
return "golang";
|
||||
}
|
||||
|
||||
// Run statistical prologue vote across sampled functions to determine active ABI
|
||||
GolangVoteCtx vote_ctx = {
|
||||
.core = core,
|
||||
.samples_count = 0,
|
||||
.reg_votes = 0,
|
||||
.stack_votes = 0
|
||||
};
|
||||
rz_flag_foreach_space_glob(core->flags, "sym.go.*", symbols, rz_golang_sample_flag_for_abi, &vote_ctx);
|
||||
|
||||
ut32 total_votes = vote_ctx.reg_votes + vote_ctx.stack_votes;
|
||||
if (total_votes >= 8 && vote_ctx.stack_votes * 10 >= total_votes * 9) {
|
||||
RZ_LOG_INFO("Golang ABI prologue vote: Stack ABI (votes: %u reg, %u stack)\n",
|
||||
vote_ctx.reg_votes, vote_ctx.stack_votes);
|
||||
return "golang_abi0";
|
||||
}
|
||||
|
||||
if (total_votes >= 8 && vote_ctx.reg_votes * 10 >= total_votes * 9) {
|
||||
RZ_LOG_INFO("Golang ABI prologue vote: Register ABI (votes: %u reg, %u stack)\n",
|
||||
vote_ctx.reg_votes, vote_ctx.stack_votes);
|
||||
}
|
||||
return "golang";
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Analyse Golang symbols matching "sym.go.*"
|
||||
* \param core RzCore Pointer
|
||||
@@ -527,7 +640,18 @@ static void analyse_golang_symbols(RzCore *core) {
|
||||
if (!symbols) {
|
||||
return;
|
||||
}
|
||||
rz_flag_foreach_space_glob(core->flags, "sym.go.*", symbols, analyse_golang_symgo_function, core);
|
||||
|
||||
const char *detected_cc = golang_detect_cc(core, symbols);
|
||||
if (detected_cc && !rz_analysis_cc_exist(core->analysis, detected_cc)) {
|
||||
detected_cc = NULL;
|
||||
}
|
||||
RzStrConstPool *cpool = rz_analysis_get_const_pool(core->analysis);
|
||||
GolangAnalyseCtx actx = {
|
||||
.core = core,
|
||||
.cc = (detected_cc && cpool) ? rz_str_constpool_get(cpool, detected_cc) : NULL
|
||||
};
|
||||
|
||||
rz_flag_foreach_space_glob(core->flags, "sym.go.*", symbols, analyse_golang_symgo_function, &actx);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -656,10 +780,10 @@ RZ_API bool rz_core_analysis_recover_golang_functions(RzCore *core) {
|
||||
ut32 num_libs = sort_recovered_library(core);
|
||||
rz_core_notify_done(core, "Recovered %u symbols and saved them at sym.go.*", num_syms);
|
||||
rz_core_notify_done(core, "Recovered %u go packages", num_libs);
|
||||
rz_golang_load_types(core);
|
||||
rz_core_notify_begin(core, "Analyze all flags starting with sym.go. (aF @@f:sym.go.*)");
|
||||
analyse_golang_symbols(core);
|
||||
rz_core_notify_done(core, "Analyze all flags starting with sym.go. (aF @@f:sym.go.*)");
|
||||
rz_golang_load_types(core);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+2
-307
@@ -458,313 +458,6 @@ 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
|
||||
TIMEOUT=1200
|
||||
CMDS=<<EOF
|
||||
aalg
|
||||
fl~sym.go.~?
|
||||
pdfs @ main ~str.
|
||||
# Attempt to get some reference strings when the count changes with izq.
|
||||
echo HEAD
|
||||
izq~:..10
|
||||
echo TAIL
|
||||
izq~:-10..
|
||||
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
|
||||
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_:
|
||||
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
|
||||
HEAD
|
||||
0x280a6f 4 4 main
|
||||
0x280a77 4 4 sort
|
||||
0x280a7f 4 4 sync
|
||||
0x280a87 4 4 time
|
||||
0x280a8e 4 4 *int
|
||||
0x280a95 4 4 AAAA
|
||||
0x280a9c 4 4 Add2
|
||||
0x280aa3 4 4 Addr
|
||||
0x280aaa 4 4 Args
|
||||
0x280ab1 4 4 Atim
|
||||
TAIL
|
||||
0x2e9fd2 5 5 %s+%s
|
||||
0x2fe095 63 63 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-
|
||||
0x2e9e6b 5 5 btcdc
|
||||
0x2e9e6b 4 4 btcd
|
||||
0x2ea4ca 5 5 btcct
|
||||
0x2ea4ca 6 6 btcctl
|
||||
0x2eb50f 5 5 btcwa
|
||||
0x2eb50f 9 9 btcwallet
|
||||
0x2ec40d 11 11 btcctl.conf
|
||||
0x2eb053 8 8 rpc.cert
|
||||
14315
|
||||
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.
|
||||
# Attempt to get some reference strings when the count changes with izq.
|
||||
echo HEAD
|
||||
izq~:..10
|
||||
echo TAIL
|
||||
izq~:-10..
|
||||
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
|
||||
HEAD
|
||||
0x270767 4 4 main
|
||||
0x27076f 4 4 sort
|
||||
0x270777 4 4 sync
|
||||
0x27077f 4 4 time
|
||||
0x270786 4 4 *int
|
||||
0x27078d 4 4 AAAA
|
||||
0x270794 4 4 Add2
|
||||
0x27079b 4 4 Addr
|
||||
0x2707a2 4 4 Args
|
||||
0x2707a9 4 4 Atim
|
||||
TAIL
|
||||
0x306b9a 5 5 %s+%s
|
||||
0x31abbf 63 63 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-
|
||||
0x306a26 5 5 btcdc
|
||||
0x306a26 4 4 btcd
|
||||
0x30708d 5 5 btcct
|
||||
0x30708d 6 6 btcctl
|
||||
0x308060 5 5 btcwa
|
||||
0x308060 9 9 btcwallet
|
||||
0x308f22 11 11 btcctl.conf
|
||||
0x307bd6 8 8 rpc.cert
|
||||
14368
|
||||
EOF
|
||||
RUN
|
||||
|
||||
NAME=Resolve all symbols on a stripped mach0 go1.18 binary (arm64)
|
||||
FILE=bins/golang/hello.mach0.stripped
|
||||
@@ -1185,6 +878,7 @@ NAME=Resolve all symbols on a stripped linux go1.21 binary
|
||||
FILE=bins/golang/go-re-sample-linux-amd64-go121
|
||||
CMDS=<<EOF
|
||||
aalg
|
||||
afc @ sym.main.main
|
||||
tc stringStruct
|
||||
fl~sym.go.~?
|
||||
pdfs @ main ~str.
|
||||
@@ -1196,6 +890,7 @@ izq~:-10..
|
||||
izq~?
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
golang
|
||||
struct stringStruct {
|
||||
char *str;
|
||||
size_t len;
|
||||
|
||||
@@ -0,0 +1,308 @@
|
||||
NAME=Resolve all symbols on a linux go1.16 binary (arm32)
|
||||
FILE=bins/golang/btcctl-linux-armv7-v0.22.0-beta
|
||||
TIMEOUT=1200
|
||||
CMDS=<<EOF
|
||||
aalg
|
||||
fl~sym.go.~?
|
||||
pdfs @ main ~str.
|
||||
# Attempt to get some reference strings when the count changes with izq.
|
||||
echo HEAD
|
||||
izq~:..10
|
||||
echo TAIL
|
||||
izq~:-10..
|
||||
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
|
||||
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_:
|
||||
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
|
||||
HEAD
|
||||
0x280a6f 4 4 main
|
||||
0x280a77 4 4 sort
|
||||
0x280a7f 4 4 sync
|
||||
0x280a87 4 4 time
|
||||
0x280a8e 4 4 *int
|
||||
0x280a95 4 4 AAAA
|
||||
0x280a9c 4 4 Add2
|
||||
0x280aa3 4 4 Addr
|
||||
0x280aaa 4 4 Args
|
||||
0x280ab1 4 4 Atim
|
||||
TAIL
|
||||
0x2e9fd2 5 5 %s+%s
|
||||
0x2fe095 63 63 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-
|
||||
0x2e9e6b 5 5 btcdc
|
||||
0x2e9e6b 4 4 btcd
|
||||
0x2ea4ca 5 5 btcct
|
||||
0x2ea4ca 6 6 btcctl
|
||||
0x2eb50f 5 5 btcwa
|
||||
0x2eb50f 9 9 btcwallet
|
||||
0x2ec40d 11 11 btcctl.conf
|
||||
0x2eb053 8 8 rpc.cert
|
||||
14315
|
||||
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
|
||||
TIMEOUT=1200
|
||||
CMDS=<<EOF
|
||||
aalg
|
||||
fl~sym.go.~?
|
||||
pdfs @ main ~str.
|
||||
# Attempt to get some reference strings when the count changes with izq.
|
||||
echo HEAD
|
||||
izq~:..10
|
||||
echo TAIL
|
||||
izq~:-10..
|
||||
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
|
||||
HEAD
|
||||
0x270767 4 4 main
|
||||
0x27076f 4 4 sort
|
||||
0x270777 4 4 sync
|
||||
0x27077f 4 4 time
|
||||
0x270786 4 4 *int
|
||||
0x27078d 4 4 AAAA
|
||||
0x270794 4 4 Add2
|
||||
0x27079b 4 4 Addr
|
||||
0x2707a2 4 4 Args
|
||||
0x2707a9 4 4 Atim
|
||||
TAIL
|
||||
0x306b9a 5 5 %s+%s
|
||||
0x31abbf 63 63 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-
|
||||
0x306a26 5 5 btcdc
|
||||
0x306a26 4 4 btcd
|
||||
0x30708d 5 5 btcct
|
||||
0x30708d 6 6 btcctl
|
||||
0x308060 5 5 btcwa
|
||||
0x308060 9 9 btcwallet
|
||||
0x308f22 11 11 btcctl.conf
|
||||
0x307bd6 8 8 rpc.cert
|
||||
14368
|
||||
EOF
|
||||
RUN
|
||||
@@ -9,6 +9,8 @@ EOF
|
||||
EXPECT=<<EOF
|
||||
amd64
|
||||
amd64syscall
|
||||
golang
|
||||
golang_abi0
|
||||
ms
|
||||
reg
|
||||
swift
|
||||
@@ -73,6 +75,7 @@ afcl
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
arm64
|
||||
golang
|
||||
reg
|
||||
swift
|
||||
EOF
|
||||
|
||||
@@ -92,6 +92,8 @@ EOF
|
||||
EXPECT=<<EOF
|
||||
amd64
|
||||
amd64syscall
|
||||
golang
|
||||
golang_abi0
|
||||
ms
|
||||
reg
|
||||
swift
|
||||
@@ -99,6 +101,8 @@ r0 reg(r0, r1, r2, r3)
|
||||
rdi reg(rdi, rsi, rdx, rcx, r8, r9, r10, r11)
|
||||
amd64
|
||||
amd64syscall
|
||||
golang
|
||||
golang_abi0
|
||||
ms
|
||||
reg
|
||||
swift
|
||||
|
||||
@@ -44,6 +44,22 @@ cc.amd64syscall.arg4=r8
|
||||
cc.amd64syscall.arg5=r9
|
||||
cc.amd64syscall.maxargs=6
|
||||
cc.amd64syscall.ret=rax
|
||||
cc.golang.arg0=rax
|
||||
cc.golang.arg1=rbx
|
||||
cc.golang.arg2=rcx
|
||||
cc.golang.arg3=rdi
|
||||
cc.golang.arg4=rsi
|
||||
cc.golang.arg5=r8
|
||||
cc.golang.arg6=r9
|
||||
cc.golang.arg7=r10
|
||||
cc.golang.arg8=r11
|
||||
cc.golang.argn=stack
|
||||
cc.golang.maxargs=9
|
||||
cc.golang.ret=rax
|
||||
cc.golang.self=r14
|
||||
cc.golang_abi0.argn=stack
|
||||
cc.golang_abi0.maxargs=0
|
||||
cc.golang_abi0.ret=rax
|
||||
cc.ms.arg0=rcx
|
||||
cc.ms.arg1=rdx
|
||||
cc.ms.arg2=r8
|
||||
@@ -77,6 +93,8 @@ cc.swift.maxargs=11
|
||||
cc.swift.ret=rax
|
||||
cc.swift.self=r13
|
||||
default.cc=amd64
|
||||
golang=cc
|
||||
golang_abi0=cc
|
||||
ms=cc
|
||||
reg=cc
|
||||
swift=cc
|
||||
@@ -175,6 +193,9 @@ EXPECT=<<EOF
|
||||
"cc.fastcall.argn=stack",
|
||||
"cc.fastcall.maxargs=2",
|
||||
"cc.fastcall.ret=eax",
|
||||
"cc.golang.argn=stack",
|
||||
"cc.golang.maxargs=0",
|
||||
"cc.golang.ret=eax",
|
||||
"cc.optlink.arg0=eax",
|
||||
"cc.optlink.arg1=edx",
|
||||
"cc.optlink.arg2=ecx",
|
||||
@@ -204,6 +225,7 @@ EXPECT=<<EOF
|
||||
"cdecl-thiscall-ms=cc",
|
||||
"default.cc=cdecl",
|
||||
"fastcall=cc",
|
||||
"golang=cc",
|
||||
"optlink=cc",
|
||||
"pascal=cc",
|
||||
"reg=cc",
|
||||
|
||||
+7
-1
@@ -8,6 +8,8 @@ EOF
|
||||
EXPECT=<<EOF
|
||||
amd64
|
||||
amd64syscall
|
||||
golang
|
||||
golang_abi0
|
||||
ms
|
||||
reg
|
||||
swift
|
||||
@@ -20,6 +22,8 @@ CMDS=tcc
|
||||
EXPECT=<<EOF
|
||||
amd64
|
||||
amd64syscall
|
||||
golang
|
||||
golang_abi0
|
||||
ms
|
||||
reg
|
||||
swift
|
||||
@@ -33,9 +37,11 @@ tccj
|
||||
tccl
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
[{"name":"amd64","ret":"rax","args":["rdi","rsi","rdx","rcx","r8","r9","xmm0","xmm1","xmm2","xmm3","xmm4"]},{"name":"amd64syscall","ret":"rax","args":["rdi","rsi","rdx","r10","r8","r9"]},{"name":"ms","ret":"rax","args":["rcx","rdx","r8","r9"]},{"name":"reg","ret":"rdi","args":["rdi","rsi","rdx","rcx","r8","r9","r10","r11"]},{"name":"swift","ret":"rax","args":["rdi","rsi","rdx","rcx","r8","r9","xmm0","xmm1","xmm2","xmm3","xmm4"],"self":"r13","error":"r12"}]
|
||||
[{"name":"amd64","ret":"rax","args":["rdi","rsi","rdx","rcx","r8","r9","xmm0","xmm1","xmm2","xmm3","xmm4"]},{"name":"amd64syscall","ret":"rax","args":["rdi","rsi","rdx","r10","r8","r9"]},{"name":"golang","ret":"rax","args":["rax","rbx","rcx","rdi","rsi","r8","r9","r10","r11"],"self":"r14"},{"name":"golang_abi0","ret":"rax","args":[]},{"name":"ms","ret":"rax","args":["rcx","rdx","r8","r9"]},{"name":"reg","ret":"rdi","args":["rdi","rsi","rdx","rcx","r8","r9","r10","r11"]},{"name":"swift","ret":"rax","args":["rdi","rsi","rdx","rcx","r8","r9","xmm0","xmm1","xmm2","xmm3","xmm4"],"self":"r13","error":"r12"}]
|
||||
rax amd64 (rdi, rsi, rdx, rcx, r8, r9, xmm0, xmm1, xmm2, xmm3, xmm4);
|
||||
rax amd64syscall (rdi, rsi, rdx, r10, r8, r9);
|
||||
rax r14.golang (rax, rbx, rcx, rdi, rsi, r8, r9, r10, r11, stack);
|
||||
rax golang_abi0 (stack);
|
||||
rax ms (rcx, rdx, r8, r9, stack);
|
||||
rdi reg (rdi, rsi, rdx, rcx, r8, r9, r10, r11);
|
||||
rax r13.swift (rdi, rsi, rdx, rcx, r8, r9, xmm0, xmm1, xmm2, xmm3, xmm4) r12;
|
||||
|
||||
Reference in New Issue
Block a user