; assembly | /* r2dec pseudo code output */ | /* baljsn_decoder.t/assume @ 0x44de90 */ | #include | ; (fcn) method.int_BloombergLP::balxml::Decoder_ParseObject::executeImp_BloombergLP::balb.SequenceWithAnonymityChoice2__BloombergLP::balb::SequenceWithAnonymityChoice2__int__BloombergLP::bdlat_TypeCategory::Choice_ () | int64_t method_int_BloombergLP::balxml::Decoder_ParseObject::executeImp_BloombergLP::balb_SequenceWithAnonymityChoice2_BloombergLP::balb::SequenceWithAnonymityChoice2_int_BloombergLP::bdlat_TypeCategory::Choice_ (int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_38h; | int64_t var_40h; | uint32_t var_48h; | int64_t var_50h; | int64_t var_f0h; | int64_t var_f8h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balxml::Decoder_ParseObject::executeImp(BloombergLP::balb::SequenceWithAnonymityChoice2*, int, BloombergLP::bdlat_TypeCategory::Choice) */ 0x0044de90 push r15 | 0x0044de92 push r14 | 0x0044de94 push rbx | 0x0044de95 sub rsp, 0x100 | 0x0044de9c mov rbx, rsi | rbx = rsi; 0x0044de9f mov r14, rdi | r14 = rdi; 0x0044dea2 test edx, 0x10000 | | if ((edx & 0x10000) == 0) { 0x0044dea8 jne 0x44def6 | 0x0044deaa mov qword [rsp + 8], 0x618fe8 | *((rsp + 8)) = vtable.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::balb::SequenceWithAnonymityChoice2_.0; 0x0044deb3 mov byte [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x0044deb8 mov qword [rsp + 0x18], rbx | *((rsp + 0x18)) = rbx; 0x0044debd mov byte [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x0044dec2 mov qword [rsp + 0x28], 0 | *((rsp + 0x28)) = 0; 0x0044decb movaps xmm0, xmmword [rip + 0xa3fbe] | xmm0 = .comment; 0x0044ded2 movups xmmword [rsp + 0x40], xmm0 | __asm ("movups xmmword [rsp + 0x40], xmm0"); 0x0044ded7 mov rax, qword [rip + 0x43cc0a] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0044dede test rax, rax | | if (rax == 0) { 0x0044dee1 je 0x44dfd9 | goto label_0; | } 0x0044dee7 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; 0x0044deec lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x0044def1 jmp 0x44e049 | goto label_1; | } 0x0044def6 mov rax, qword [r14] | rax = *(r14); 0x0044def9 mov rax, qword [rax] | rax = *(rax); 0x0044defc cmp byte [rax + 8], 0 | | if (*((rax + 8)) != 0) { 0x0044df00 je 0x44df18 | 0x0044df02 mov rdi, qword [r14 + 8] | 0x0044df06 mov esi, dword [r14 + 0x10] | 0x0044df0a call 0x46bbc0 | rax = BloombergLP::balb::SequenceWithAnonymityChoice2::lookupSelectionInfo(char const*,int) (*((r14 + 8)), *((r14 + 0x10))); 0x0044df0f test rax, rax | | if (rax == 0) { 0x0044df12 je 0x44e01f | goto label_2; | } | } 0x0044df18 mov rsi, qword [r14 + 8] | 0x0044df1c mov edx, dword [r14 + 0x10] | 0x0044df20 mov rdi, rbx | 0x0044df23 call 0x46c080 | eax = BloombergLP::balb::SequenceWithAnonymityChoice2::makeSelection(char const*,int) (rbx, *((r14 + 8)), *((r14 + 0x10))); 0x0044df28 test eax, eax | | if (eax == 0) { 0x0044df2a je 0x44dff2 | goto label_3; | } 0x0044df30 mov rbx, qword [r14] | rbx = *(r14); 0x0044df33 mov rsi, qword [rbx + 0x2d0] | 0x0044df3a lea r15, [rsp + 8] | r15 = rsp + 8; 0x0044df3f mov rdi, r15 | 0x0044df42 call 0x418b40 | BloombergLP::balxml::Decoder::MemOutStream::MemOutStream(BloombergLP::bslma::Allocator*) (r15, *((rbx + 0x2d0))); 0x0044df47 mov dword [rsp + 0xf0], 2 | *((rsp + 0xf0)) = 2; 0x0044df52 mov qword [rsp + 0xf8], rbx | *((rsp + 0xf8)) = rbx; 0x0044df5a mov esi, 0x612bf6 | 0x0044df5f mov edx, 0x1b | 0x0044df64 mov rdi, r15 | 0x0044df67 call 0x417b30 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (r15, "Unable to make selection: \", 0x1b); 0x0044df6c mov r15, rax | r15 = rax; 0x0044df6f mov rbx, qword [r14 + 8] | rbx = *((r14 + 8)); 0x0044df73 mov rdi, rbx | 0x0044df76 call 0x405eb0 | rax = strlen (*((r14 + 8))); 0x0044df7b mov rdi, r15 | 0x0044df7e mov rsi, rbx | 0x0044df81 mov rdx, rax | 0x0044df84 call 0x417b30 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (r15, rbx, rax); 0x0044df89 mov esi, 0x612c12 | 0x0044df8e mov edx, 2 | 0x0044df93 mov rdi, rax | 0x0044df96 call 0x417b30 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x612c12, 2); 0x0044df9b mov rdi, rax | rdi = rax; 0x0044df9e call 0x406230 | std::_1::basic_ostream>::flush() (); 0x0044dfa3 mov rdi, qword [rsp + 0xf8] | 0x0044dfab mov esi, dword [rsp + 0xf0] | 0x0044dfb2 mov rdx, qword [rsp + 0x38] | 0x0044dfb7 mov eax, dword [rsp + 0x40] | eax = *((rsp + 0x40)); 0x0044dfbb sub eax, edx | eax -= edx; 0x0044dfbd movsxd rcx, eax | rcx = (int64_t) eax; 0x0044dfc0 call 0x478080 | BloombergLP::balxml::Decoder::setDecoderError(BloombergLP::balxml::ErrorInfo::Severity,std::_1::basic_string_view>) (*((rsp + 0xf8)), *((rsp + 0xf0)), *((rsp + 0x38)), rcx); 0x0044dfc5 lea rdi, [rsp + 8] | 0x0044dfca call 0x477640 | BloombergLP::balxml::Decoder::MemOutStream::~MemOutStream() (rsp + 8); | do { 0x0044dfcf mov ebx, 0xffffffff | ebx = 0xffffffff; 0x0044dfd4 jmp 0x44e08f | goto label_4; | label_0: 0x0044dfd9 call 0x4cac60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0044dfde cmp qword [rsp + 0x48], 0x17 | 0x0044dfe4 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; | if (*((rsp + 0x48)) != 0x17) { 0x0044dfe9 jne 0x44e044 | goto label_5; | } 0x0044dfeb lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x0044dff0 jmp 0x44e049 | goto label_1; | label_3: 0x0044dff2 mov eax, dword [rbx + 8] | eax = *((rbx + 8)); 0x0044dff5 cmp eax, 1 | | if (eax == 1) { 0x0044dff8 je 0x44e09e | goto label_6; | } 0x0044dffe test eax, eax | 0x0044e000 jne 0x44dfcf | | } while (eax != 0); 0x0044e002 mov rsi, qword [rbx] | rsi = *(rbx); 0x0044e005 mov edx, dword [rip + 0x1cd305] | edx = .comment; 0x0044e00b mov rdi, r14 | rdi = r14; 0x0044e00e add rsp, 0x100 | 0x0044e015 pop rbx | 0x0044e016 pop r14 | 0x0044e018 pop r15 | 0x0044e01a jmp 0x427f60 | void (*0x427f60)() (); | label_2: 0x0044e01f mov rax, qword [r14] | rax = *(r14); 0x0044e022 inc dword [rax + 0x410] | *((rax + 0x410))++; 0x0044e028 lea rbx, [rsp + 8] | rbx = rsp + 8; 0x0044e02d mov rdi, rbx | rdi = rbx; 0x0044e030 call 0x478490 | BloombergLP::balxml::Decoder_UnknownElementContext::Decoder_UnknownElementContext() (); 0x0044e035 mov rsi, qword [r14] | 0x0044e038 mov rdi, rbx | 0x0044e03b call 0x476fb0 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (rbx, *(r14)); 0x0044e040 mov ebx, eax | ebx = eax; 0x0044e042 jmp 0x44e085 | goto label_7; | label_5: 0x0044e044 mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); | label_1: 0x0044e049 mov byte [rcx], 0 | *(rcx) = 0; 0x0044e04c mov rsi, qword [r14] | 0x0044e04f lea rdi, [rsp + 8] | 0x0044e054 call 0x476fb0 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (rsp + 8, *(r14)); 0x0044e059 mov ebx, eax | ebx = eax; 0x0044e05b mov qword [rsp + 8], 0x618fe8 | *((rsp + 8)) = vtable.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::balb::SequenceWithAnonymityChoice2_.0; 0x0044e064 cmp qword [rsp + 0x48], 0x17 | | if (*((rsp + 0x48)) != 0x17) { 0x0044e06a je 0x44e07c | 0x0044e06c mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x0044e071 mov rdi, qword [rsp + 0x50] | rdi = *((rsp + 0x50)); 0x0044e076 mov rax, qword [rdi] | rax = *(rdi); 0x0044e079 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0044e07c mov qword [rsp + 0x40], 0xffffffffffffffff | *((rsp + 0x40)) = 0xffffffffffffffff; | label_7: 0x0044e085 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0044e08a call 0x4788c0 | BloombergLP::balxml::Decoder_ElementContext::~Decoder_ElementContext() (); | label_4: 0x0044e08f mov eax, ebx | eax = ebx; 0x0044e091 add rsp, 0x100 | 0x0044e098 pop rbx | 0x0044e099 pop r14 | 0x0044e09b pop r15 | 0x0044e09d ret | return rax; | label_6: 0x0044e09e mov rsi, qword [rbx] | rsi = *(rbx); 0x0044e0a1 mov edx, dword [rip + 0x1cd291] | edx = .comment; 0x0044e0a7 mov rdi, r14 | rdi = r14; 0x0044e0aa add rsp, 0x100 | 0x0044e0b1 pop rbx | 0x0044e0b2 pop r14 | 0x0044e0b4 pop r15 | 0x0044e0b6 jmp 0x4444c0 | return void (*0x4444c0)() (); | }