; assembly | /* r2dec pseudo code output */ | /* baljsn_decoder.t/none @ 0x478890 */ | #include | ; (fcn) method.BloombergLP::balxml::Decoder_ParseObject.executeImp_bsl::vector_char__bsl::allocator_char_____int__BloombergLP::bdlat_TypeCategory::Array_ () | uint64_t method_BloombergLP::balxml::Decoder_ParseObject_executeImp_bsl::vector_char_bsl::allocator_char_int_BloombergLP::bdlat_TypeCategory::Array_ (int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_20h_9; | int64_t var_18h_6; | int64_t var_38h_10; | int64_t var_40h_9; | int64_t var_48h_7; | int64_t var_34h; | int64_t var_44h; | int64_t var_c0h; | int64_t var_10h_12; | int64_t var_60h_5; | int64_t var_28h_4; | int64_t var_38h_5; | int64_t var_c0h_2; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::balxml::Decoder_ParseObject::executeImp(bsl::vector >*, int, BloombergLP::bdlat_TypeCategory::Array) */ 0x00478890 push rbp | 0x00478891 push r15 | 0x00478893 push r14 | 0x00478895 push rbx | 0x00478896 sub rsp, 0xd8 | 0x0047889d mov ebp, edx | 0x0047889f mov rbx, rsi | rbx = rsi; 0x004788a2 mov r14, rdi | r14 = rdi; 0x004788a5 test edx, 0x100000 | | if ((edx & 0x100000) == 0) { 0x004788ab jne 0x478913 | 0x004788ad mov eax, ebp | eax = ebp; 0x004788af and eax, 7 | eax &= 7; 0x004788b2 cmp eax, 4 | | if (eax <= 4) { 0x004788b5 ja 0x47892d | 0x004788b7 cmp eax, 1 | | if (eax == 1) { 0x004788ba je 0x47892d | goto label_0; | } 0x004788bc mov qword [rsp], 0x61be00 | *(rsp) = vtable.BloombergLP::balxml::Decoder_StdVectorCharContext.0; 0x004788c4 cmp eax, 4 | | if (eax > 4) { 0x004788c7 ja 0x4789ab | goto label_1; | } 0x004788cd mov eax, eax | | /* switch table (5 cases) at 0x61bc80 */ 0x004788cf jmp qword [rax*8 + 0x61bc80] | 0x004788d6 lea rax, [rsp + 0x10] | rax = rsp + 0x10; 0x004788db mov qword [rsp + 0x10], 0x61c5c0 | *((rsp + 0x10)) = vtable.BloombergLP::balxml::Decoder_PushParserContext_bsl::vector_char__bsl::allocator_char_____BloombergLP::balxml::Base64Parser_bsl::vector_char__bsl::allocator_char_______.0; 0x004788e4 mov dword [rsp + 0x18], ebp | *((rsp + 0x18)) = ebp; 0x004788e8 mov qword [rsp + 0x20], rbx | *((rsp + 0x20)) = rbx; 0x004788ed mov rcx, qword [rip + 0x1a6f5c] | rcx = BloombergLP::bdlde::Base64Decoder::s_ignorableStrict_p; 0x004788f4 mov qword [rsp + 0x28], rcx | *((rsp + 0x28)) = rcx; 0x004788f9 mov byte [rsp + 0x30], 0 | *((rsp + 0x30)) = 0; 0x004788fe xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00478901 movups xmmword [rsp + 0x34], xmm0 | __asm ("movups xmmword [rsp + 0x34], xmm0"); 0x00478906 mov dword [rsp + 0x44], 0 | *((rsp + 0x44)) = 0; 0x0047890e jmp 0x4789a3 | | } else { 0x00478913 mov rdi, r14 | rdi = r14; 0x00478916 mov rsi, rbx | rsi = rbx; 0x00478919 mov edx, ebp | edx = ebp; 0x0047891b add rsp, 0xd8 | 0x00478922 pop rbx | 0x00478923 pop r14 | 0x00478925 pop r15 | 0x00478927 pop rbp | 0x00478928 jmp 0x478ab0 | void (*0x478ab0)() (); | } | label_0: 0x0047892d mov r15, qword [rbx + 8] | r15 = *((rbx + 8)); 0x00478931 sub r15, qword [rbx] | r15 -= *(rbx); 0x00478934 lea eax, [r15 + 1] | eax = r15 + 1; 0x00478938 movsxd rsi, eax | rsi = (int64_t) eax; 0x0047893b mov rdi, rbx | 0x0047893e call 0x4db800 | bsl::vector>::resize(unsigned long) (rbx, rsi); 0x00478943 movsxd rax, r15d | rax = (int64_t) r15d; 0x00478946 add rax, qword [rbx] | rax += *(rbx); 0x00478949 mov qword [rsp], 0x61c810 | *(rsp) = vtable.BloombergLP::balxml::Decoder_SimpleContext_char_.0; 0x00478951 mov dword [rsp + 8], ebp | *((rsp + 8)) = ebp; 0x00478955 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0047895a mov rdi, qword [r14] | 0x0047895d mov rsi, rsp | 0x00478960 call 0x477110 | eax = BloombergLP::balxml::Decoder::parse(BloombergLP::balxml::Decoder_ElementContext*) (*(r14), rsp); 0x00478965 mov ebx, eax | ebx = eax; 0x00478967 jmp 0x4789cd | goto label_2; 0x00478969 lea rax, [rsp + 0x10] | rax = rsp + 0x10; 0x0047896e mov qword [rsp + 0x10], 0x61c690 | *((rsp + 0x10)) = vtable.BloombergLP::balxml::Decoder_PushParserContext_bsl::vector_char__bsl::allocator_char_____BloombergLP::balxml::HexParser_bsl::vector_char__bsl::allocator_char_______.0; 0x00478977 mov dword [rsp + 0x18], ebp | *((rsp + 0x18)) = ebp; 0x0047897b mov qword [rsp + 0x20], rbx | *((rsp + 0x20)) = rbx; 0x00478980 mov byte [rsp + 0x28], 0 | *((rsp + 0x28)) = 0; 0x00478985 mov qword [rsp + 0x30], 0 | *((rsp + 0x30)) = 0; 0x0047898e jmp 0x4789a3 | goto label_3; 0x00478990 lea rax, [rsp + 0x10] | rax = rsp + 0x10; 0x00478995 mov qword [rsp + 0x10], 0x61c760 | *((rsp + 0x10)) = vtable.BloombergLP::balxml::Decoder_UTF8Context_bsl::vector_char__bsl::allocator_char_____.0; 0x0047899e mov qword [rsp + 0x18], rbx | *((rsp + 0x18)) = rbx; | } | label_3: 0x004789a3 mov qword [rsp + 0xc0], rax | *((rsp + 0xc0)) = rax; | label_1: 0x004789ab mov rdi, qword [r14] | 0x004789ae mov rsi, rsp | 0x004789b1 call 0x477110 | eax = BloombergLP::balxml::Decoder::parse(BloombergLP::balxml::Decoder_ElementContext*) (*(r14), rsp); 0x004789b6 mov ebx, eax | ebx = eax; 0x004789b8 mov qword [rsp], 0x61be00 | 0x004789c0 mov rdi, qword [rsp + 0xc0] | rdi = *((rsp + 0xc0)); 0x004789c8 mov rax, qword [rdi] | rax = *(rdi); 0x004789cb call qword [rax] | uint64_t (*rax)(void) (vtable.BloombergLP::balxml::Decoder_StdVectorCharContext.0); | label_2: 0x004789cd mov eax, ebx | eax = ebx; 0x004789cf add rsp, 0xd8 | 0x004789d6 pop rbx | 0x004789d7 pop r14 | 0x004789d9 pop r15 | 0x004789db pop rbp | 0x004789dc ret | return rax; | }