; assembly | /* r2dec pseudo code output */ | /* baljsn_decoder.t/assume @ 0x450a90 */ | #include | ; (fcn) method.int_BloombergLP::balb::Choice3::manipulateSelection_BloombergLP::baljsn.Decoder_ElementVisitor__BloombergLP::baljsn::Decoder_ElementVisitor_ () | int32_t method_int_BloombergLP::balb::Choice3::manipulateSelection_BloombergLP::baljsn_Decoder_ElementVisitor_BloombergLP::baljsn::Decoder_ElementVisitor_ (uint32_t arg_8h, int64_t arg_10h, int64_t arg2, int64_t arg1) { | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balb::Choice3::manipulateSelection(BloombergLP::baljsn::Decoder_ElementVisitor&) */ 0x00450a90 push r14 | 0x00450a92 push rbx | 0x00450a93 sub rsp, 0x18 | 0x00450a97 mov eax, dword [rdi + 0x170] | eax = *((rdi + 0x170)); 0x00450a9d cmp rax, 3 | | if (rax > 3) { 0x00450aa1 ja 0x450b3e | goto label_1; | } 0x00450aa7 mov rbx, rdi | rbx = rdi; | /* switch table (4 cases) at 0x4f5e18 */ 0x00450aaa jmp qword [rax*8 + 0x4f5e18] | 0x00450ab1 mov rdi, qword [rsi] | rdi = *(rsi); 0x00450ab4 mov edx, dword [rip + 0x1ca0a6] | edx = .comment; 0x00450aba mov rsi, rbx | rsi = rbx; 0x00450abd add rsp, 0x18 | 0x00450ac1 pop rbx | 0x00450ac2 pop r14 | 0x00450ac4 jmp 0x450b80 | void (*0x450b80)() (); 0x00450ac9 mov r14, qword [rsi] | r14 = *(rsi); 0x00450acc cmp dword [r14 + 0x2300], 7 | | if (*((r14 + 0x2300)) == 7) { 0x00450ad4 jne 0x450b2c | 0x00450ad6 lea rdi, [r14 + 0x120] | 0x00450add xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00450ae0 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x00450ae4 mov rsi, rsp | 0x00450ae7 call 0x45f7a0 | eax = BloombergLP::baljsn::Tokenizer::value(std::_1::basic_string_view>*)const (r14 + 0x120, rsp); 0x00450aec test eax, eax | | if (eax == 0) { 0x00450aee je 0x450b4b | goto label_2; | } 0x00450af0 mov esi, 0x6131e6 | esi = "Error reading simple value\n"; 0x00450af5 mov edx, 0x1b | edx = 0x1b; 0x00450afa jmp 0x450b36 | goto label_3; 0x00450afc mov rdi, qword [rsi] | rdi = *(rsi); 0x00450aff mov edx, dword [rip + 0x1ca0ab] | edx = *(0x0061abb0); 0x00450b05 mov rsi, rbx | rsi = rbx; 0x00450b08 add rsp, 0x18 | 0x00450b0c pop rbx | 0x00450b0d pop r14 | 0x00450b0f jmp 0x451510 | void (*0x451510)() (); 0x00450b14 mov rdi, qword [rsi] | rdi = *(rsi); 0x00450b17 mov edx, dword [rip + 0x1ca0bb] | edx = *(0x0061abd8); 0x00450b1d mov rsi, rbx | rsi = rbx; 0x00450b20 add rsp, 0x18 | 0x00450b24 pop rbx | 0x00450b25 pop r14 | 0x00450b27 jmp 0x451740 | void (*0x451740)() (); | } 0x00450b2c mov esi, 0x6131c2 | 0x00450b31 mov edx, 0x23 | | label_3: 0x00450b36 mov rdi, r14 | 0x00450b39 call 0x417b30 | 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_1: 0x00450b3e mov eax, 0xffffffff | eax = 0xffffffff; | label_0: 0x00450b43 add rsp, 0x18 | 0x00450b47 pop rbx | 0x00450b48 pop r14 | 0x00450b4a ret | return eax; | label_2: 0x00450b4b cmp qword [rsp + 8], 0 | 0x00450b51 je 0x450b3e | | } while (*((rsp + 8)) == 0); 0x00450b53 lea rdi, [rsp + 0x10] | 0x00450b58 mov rsi, rsp | 0x00450b5b call 0x45e240 | eax = BloombergLP::baljsn::ParserUtil::getUint64(unsigned long long*,std::_1::basic_string_view>const&) (rsp + 0x10, rsp); 0x00450b60 mov ecx, eax | ecx = eax; 0x00450b62 mov eax, 0xffffffff | eax = 0xffffffff; 0x00450b67 test ecx, ecx | | if (ecx != 0) { 0x00450b69 jne 0x450b43 | goto label_0; | } 0x00450b6b mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x00450b70 cmp rcx, 0xff | | if (rcx > 0xff) { 0x00450b77 ja 0x450b43 | goto label_0; | } 0x00450b79 mov byte [rbx], cl | *(rbx) = cl; 0x00450b7b xor eax, eax | eax = 0; 0x00450b7d jmp 0x450b43 | goto label_0; | }