; assembly | /* r2dec pseudo code output */ | /* baljsn_decoder.t/assume @ 0x478750 */ | #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_8; | 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; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::balxml::Decoder_ParseObject::executeImp(bsl::vector >*, int, BloombergLP::bdlat_TypeCategory::Array) */ 0x00478750 push rbp | 0x00478751 push r15 | 0x00478753 push r14 | 0x00478755 push rbx | 0x00478756 sub rsp, 0xd8 | 0x0047875d mov ebp, edx | 0x0047875f mov rbx, rsi | rbx = rsi; 0x00478762 mov r14, rdi | r14 = rdi; 0x00478765 test edx, 0x100000 | | if ((edx & 0x100000) == 0) { 0x0047876b jne 0x4787cf | 0x0047876d mov eax, ebp | eax = ebp; 0x0047876f and eax, 7 | eax &= 7; 0x00478772 cmp eax, 4 | | if (eax > 4) { 0x00478775 ja 0x47884f | goto label_0; | } 0x0047877b cmp eax, 1 | | if (eax == 1) { 0x0047877e je 0x47884f | goto label_0; | } 0x00478784 mov qword [rsp], 0x61bf30 | *(rsp) = vtable.BloombergLP::balxml::Decoder_StdVectorCharContext.0; 0x0047878c mov eax, eax | | /* switch table (2 cases) at 0x61bdb0 */ 0x0047878e jmp qword [rax*8 + 0x61bdb0] | 0x00478795 lea rax, [rsp + 0x10] | rax = rsp + 0x10; 0x0047879a mov qword [rsp + 0x10], 0x61c6f0 | *((rsp + 0x10)) = vtable.BloombergLP::balxml::Decoder_PushParserContext_bsl::vector_char__bsl::allocator_char_____BloombergLP::balxml::Base64Parser_bsl::vector_char__bsl::allocator_char_______.0; 0x004787a3 mov dword [rsp + 0x18], ebp | *((rsp + 0x18)) = ebp; 0x004787a7 mov qword [rsp + 0x20], rbx | *((rsp + 0x20)) = rbx; 0x004787ac mov rcx, qword [rip + 0x1a71dd] | rcx = BloombergLP::bdlde::Base64Decoder::s_ignorableStrict_p; 0x004787b3 mov qword [rsp + 0x28], rcx | *((rsp + 0x28)) = rcx; 0x004787b8 mov byte [rsp + 0x30], 0 | *((rsp + 0x30)) = 0; 0x004787bd xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x004787c0 movups xmmword [rsp + 0x34], xmm0 | __asm ("movups xmmword [rsp + 0x34], xmm0"); 0x004787c5 mov dword [rsp + 0x44], 0 | *((rsp + 0x44)) = 0; 0x004787cd jmp 0x478823 | | } else { 0x004787cf mov rdi, r14 | rdi = r14; 0x004787d2 mov rsi, rbx | rsi = rbx; 0x004787d5 mov edx, ebp | edx = ebp; 0x004787d7 add rsp, 0xd8 | 0x004787de pop rbx | 0x004787df pop r14 | 0x004787e1 pop r15 | 0x004787e3 pop rbp | 0x004787e4 jmp 0x478970 | void (*0x478970)() (); | } 0x00478823 mov qword [rsp + 0xc0], rax | *((rsp + 0xc0)) = rax; 0x0047882b mov rdi, qword [r14] | 0x0047882e mov rsi, rsp | 0x00478831 call 0x476fc0 | eax = BloombergLP::balxml::Decoder::parse(BloombergLP::balxml::Decoder_ElementContext*) (*(r14), rsp); 0x00478836 mov ebx, eax | ebx = eax; 0x00478838 mov qword [rsp], 0x61bf30 | 0x00478840 mov rdi, qword [rsp + 0xc0] | rdi = *((rsp + 0xc0)); 0x00478848 mov rax, qword [rdi] | rax = *(rdi); 0x0047884b call qword [rax] | uint64_t (*rax)(void) (vtable.BloombergLP::balxml::Decoder_StdVectorCharContext.0); 0x0047884d jmp 0x478889 | goto label_1; | label_0: 0x0047884f mov r15, qword [rbx + 8] | r15 = *((rbx + 8)); 0x00478853 sub r15, qword [rbx] | r15 -= *(rbx); 0x00478856 lea eax, [r15 + 1] | eax = r15 + 1; 0x0047885a movsxd rsi, eax | rsi = (int64_t) eax; 0x0047885d mov rdi, rbx | 0x00478860 call 0x4db070 | bsl::vector>::resize(unsigned long) (rbx, rsi); 0x00478865 movsxd rax, r15d | rax = (int64_t) r15d; 0x00478868 add rax, qword [rbx] | rax += *(rbx); 0x0047886b mov qword [rsp], 0x61c940 | *(rsp) = vtable.BloombergLP::balxml::Decoder_SimpleContext_char_.0; 0x00478873 mov dword [rsp + 8], ebp | *((rsp + 8)) = ebp; 0x00478877 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0047887c mov rdi, qword [r14] | 0x0047887f mov rsi, rsp | 0x00478882 call 0x476fc0 | eax = BloombergLP::balxml::Decoder::parse(BloombergLP::balxml::Decoder_ElementContext*) (*(r14), rsp); 0x00478887 mov ebx, eax | ebx = eax; | label_1: 0x00478889 mov eax, ebx | 0x0047888b add rsp, 0xd8 | 0x00478892 pop rbx | 0x00478893 pop r14 | 0x00478895 pop r15 | 0x00478897 pop rbp | 0x00478898 ret | return rax; 0x00478899 mov rbx, rax | rbx = rax; 0x0047889c mov qword [rsp], 0x61bf30 | 0x004788a4 mov rdi, qword [rsp + 0xc0] | rdi = *((rsp + 0xc0)); 0x004788ac mov rax, qword [rdi] | rax = *(rdi); 0x004788af call qword [rax] | uint64_t (*rax)(void) (vtable.BloombergLP::balxml::Decoder_StdVectorCharContext.0); 0x004788b1 mov rdi, rbx | rdi = rbx; 0x004788b4 call 0x4065a0 | rax = Unwind_Resume (); 0x004788b9 nop dword [rax] | | }