; assembly | /* r2dec pseudo code output */ | /* baljsn_decoder.t/none @ 0x456540 */ | #include | ; (fcn) method.int_BloombergLP::balb::Choice2::manipulateSelection_BloombergLP::baljsn.Decoder_ElementVisitor__BloombergLP::baljsn::Decoder_ElementVisitor_ () | int64_t method_int_BloombergLP::balb::Choice2::manipulateSelection_BloombergLP::baljsn_Decoder_ElementVisitor_BloombergLP::baljsn::Decoder_ElementVisitor_ (uint32_t arg_8h, int64_t arg_18h, int64_t arg2, int64_t arg1) { | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balb::Choice2::manipulateSelection(BloombergLP::baljsn::Decoder_ElementVisitor&) */ 0x00456540 push rbp | 0x00456541 push r14 | 0x00456543 push rbx | 0x00456544 sub rsp, 0x20 | 0x00456548 mov eax, dword [rdi + 0x30] | eax = *((rdi + 0x30)); 0x0045654b mov ebp, 0xffffffff | 0x00456550 cmp rax, 3 | | if (rax > 3) { 0x00456554 ja 0x45664a | goto label_0; | } 0x0045655a mov rbx, rdi | rbx = rdi; | /* switch table (4 cases) at 0x4f6740 */ 0x0045655d jmp qword [rax*8 + 0x4f6740] | 0x00456564 mov r14, qword [rsi] | r14 = *(rsi); 0x00456567 cmp dword [r14 + 0x2300], 7 | | if (*((r14 + 0x2300)) == 7) { 0x0045656f jne 0x456638 | 0x00456575 lea rdi, [r14 + 0x120] | 0x0045657c xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0045657f movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x00456583 mov rsi, rsp | 0x00456586 call 0x45f8a0 | eax = BloombergLP::baljsn::Tokenizer::value(std::_1::basic_string_view>*)const (r14 + 0x120, rsp); 0x0045658b test eax, eax | | if (eax == 0) { 0x0045658d jne 0x4565d0 | 0x0045658f mov rsi, rsp | 0x00456592 mov rdi, rbx | 0x00456595 call 0x45e700 | eax = BloombergLP::baljsn::ParserUtil::getValue(bool*,std::_1::basic_string_view>const&) (rbx, rsp); 0x0045659a mov ebp, eax | 0x0045659c jmp 0x45664a | goto label_0; 0x004565a1 mov r14, qword [rsi] | r14 = *(rsi); 0x004565a4 cmp dword [r14 + 0x2300], 7 | | if (*((r14 + 0x2300)) != 7) { 0x004565ac jne 0x456638 | goto label_1; | } 0x004565b2 lea rdi, [r14 + 0x120] | 0x004565b9 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x004565bc movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x004565c0 mov rsi, rsp | 0x004565c3 call 0x45f8a0 | eax = BloombergLP::baljsn::Tokenizer::value(std::_1::basic_string_view>*)const (r14 + 0x120, rsp); 0x004565c8 test eax, eax | | if (eax == 0) { 0x004565ca je 0x456655 | goto label_2; | } | } 0x004565d0 mov esi, 0x613950 | esi = "Error reading simple value\n"; 0x004565d5 mov edx, 0x1b | edx = 0x1b; 0x004565da jmp 0x456642 | goto label_3; 0x004565dc mov rax, qword [rbx] | rax = *(rbx); 0x004565df mov rdi, qword [rsi] | rdi = *(rsi); 0x004565e2 mov edx, dword [rip + 0x1c4818] | edx = .comment; 0x004565e8 mov rsi, rax | rsi = rax; 0x004565eb add rsp, 0x20 | 0x004565ef pop rbx | 0x004565f0 pop r14 | 0x004565f2 pop rbp | 0x004565f3 jmp 0x452700 | void (*0x452700)() (); 0x004565f8 mov r14, qword [rsi] | r14 = *(rsi); 0x004565fb cmp dword [r14 + 0x2300], 7 | | if (*((r14 + 0x2300)) == 7) { 0x00456603 jne 0x456638 | 0x00456605 lea rdi, [r14 + 0x120] | 0x0045660c xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0045660f movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x00456613 mov rsi, rsp | 0x00456616 call 0x45f8a0 | eax = BloombergLP::baljsn::Tokenizer::value(std::_1::basic_string_view>*)const (r14 + 0x120, rsp); 0x0045661b test eax, eax | | if (eax == 0) { 0x0045661d je 0x456664 | goto label_4; | } 0x0045661f mov esi, 0x613950 | 0x00456624 mov edx, 0x1b | 0x00456629 mov rdi, r14 | 0x0045662c call 0x417b80 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (r14, "Error reading simple value\n", 0x1b); 0x00456631 mov ebp, 0xffffffff | 0x00456636 jmp 0x45664a | | } | } else { | label_1: 0x00456638 mov esi, 0x61392c | 0x0045663d mov edx, 0x23 | | label_3: 0x00456642 mov rdi, r14 | 0x00456645 call 0x417b80 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (r14, "Simple element value was not found\n", 0x23); | } | do { | label_0: 0x0045664a mov eax, ebp | eax = ebp; 0x0045664c add rsp, 0x20 | 0x00456650 pop rbx | 0x00456651 pop r14 | 0x00456653 pop rbp | 0x00456654 ret | return rax; | label_2: 0x00456655 mov rsi, rsp | 0x00456658 mov rdi, rbx | 0x0045665b call 0x45da70 | eax = BloombergLP::baljsn::ParserUtil::getString(bsl::basic_string,bsl::allocator>*,std::_1::basic_string_view>const&) (rbx, rsp); 0x00456660 mov ebp, eax | 0x00456662 jmp 0x45664a | | } while (1); | label_4: 0x00456664 cmp qword [rsp + 8], 0 | | if (*((rsp + 8)) == 0) { 0x0045666a je 0x456696 | goto label_5; | } 0x0045666c lea rdi, [rsp + 0x18] | 0x00456671 mov rsi, rsp | 0x00456674 call 0x45e340 | eax = BloombergLP::baljsn::ParserUtil::getUint64(unsigned long long*,std::_1::basic_string_view>const&) (rsp + 0x18, rsp); 0x00456679 mov ebp, 0xffffffff | 0x0045667e test eax, eax | | if (eax != 0) { 0x00456680 jne 0x45664a | goto label_0; | } 0x00456682 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x00456687 mov rcx, rax | rcx = *((rsp + 0x18)); 0x0045668a shr rcx, 0x20 | rcx >>= 0x20; | if (rcx != 0) { 0x0045668e jne 0x45664a | goto label_0; | } 0x00456690 mov dword [rbx], eax | *(rbx) = eax; 0x00456692 xor ebp, ebp | ebp = 0; 0x00456694 jmp 0x45664a | goto label_0; | label_5: 0x00456696 mov ebp, 0xffffffff | 0x0045669b jmp 0x45664a | goto label_0; | }