; assembly | /* r2dec pseudo code output */ | /* ball_attribute.t/assume @ 0x414c00 */ | #include | ; (fcn) sym._ZNK11BloombergLP4bdlb10VariantImpINS_5bslmf8TypeListIJixN3bsl12basic_stringIcNSt3__111char_traitsIcEENS4_9allocatorIcEEEEEEEE () | int64_t ZNK11BloombergLP4bdlb10VariantImpINS_5bslmf8TypeListIJixN3bsl12basic_stringIcNSt3_111char_traitsIcEENS4_9allocatorIcEEEEEEEE (char * arg2, char * arg1) { | rsi = arg2; | rdi = arg1; 0x00414c00 push r14 | 0x00414c02 push rbx | 0x00414c03 push rax | 0x00414c04 mov eax, dword [rdi + 0x30] | eax = *((rdi + 0x30)); 0x00414c07 lea ecx, [rax - 4] | ecx = rax - 4; 0x00414c0a cmp ecx, 0x11 | 0x00414c0d jae 0x414c17 | | while (1) { | label_0: 0x00414c0f add rsp, 8 | 0x00414c13 pop rbx | 0x00414c14 pop r14 | 0x00414c16 ret | return eax; 0x00414c17 mov rbx, rdi | rbx = rdi; 0x00414c1a mov eax, eax | | /* switch table (18 cases) at 0x426f28 */ 0x00414c1c jmp qword [rax*8 + 0x426f28] | 0x00414c23 mov rax, qword [rsi] | rax = *(rsi); 0x00414c26 mov ecx, dword [rbx] | ecx = *(rbx); 0x00414c28 mov dword [rax], ecx | *(rax) = ecx; 0x00414c2a jmp 0x414c0f | | } 0x00414c2c mov rax, qword [rsi] | rax = *(rsi); 0x00414c2f mov rcx, qword [rbx] | rcx = *(rbx); 0x00414c32 mov qword [rax], rcx | *(rax) = rcx; 0x00414c35 jmp 0x414c0f | goto label_0; 0x00414c37 mov r14, qword [rsi] | r14 = *(rsi); 0x00414c3a mov rdi, qword [rsi + 8] | rdi = *((rsi + 8)); 0x00414c3e test rdi, rdi | | if (rdi == 0) { 0x00414c41 jne 0x414c57 | 0x00414c43 mov rdi, qword [rip + 0x21fd26] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00414c4a test rdi, rdi | | if (rdi != 0) { 0x00414c4d jne 0x414c57 | goto label_1; | } 0x00414c4f call 0x418b20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00414c54 mov rdi, rax | rdi = rax; | } | label_1: 0x00414c57 mov rax, qword [rbx + 0x20] | rax = *((rbx + 0x20)); 0x00414c5b mov qword [r14 + 0x20], rax | *((r14 + 0x20)) = rax; 0x00414c5f movups xmm0, xmmword [rbx] | __asm ("movups xmm0, xmmword [rbx]"); 0x00414c62 movups xmm1, xmmword [rbx + 0x10] | __asm ("movups xmm1, xmmword [rbx + 0x10]"); 0x00414c66 movups xmmword [r14 + 0x10], xmm1 | __asm ("movups xmmword [r14 + 0x10], xmm1"); 0x00414c6b movups xmmword [r14], xmm0 | __asm ("movups xmmword [r14], xmm0"); 0x00414c6f mov qword [r14 + 0x28], rdi | *((r14 + 0x28)) = rdi; 0x00414c73 cmp rax, 0x17 | | if (rax == 0x17) { 0x00414c77 je 0x414c0f | goto label_0; | } 0x00414c79 mov rax, qword [rbx + 0x18] | rax = *((rbx + 0x18)); 0x00414c7d cmp rax, 0x17 | 0x00414c81 mov esi, 0x17 | esi = 0x17; | if (rax > 0x17) { 0x00414c86 cmova rsi, rax | rsi = rax; | } 0x00414c8a mov qword [r14], 0 | *(r14) = 0; 0x00414c91 mov qword [r14 + 0x18], rax | *((r14 + 0x18)) = rax; 0x00414c95 mov qword [r14 + 0x20], rsi | *((r14 + 0x20)) = rsi; 0x00414c99 cmp rax, 0x18 | | if (rax >= 0x18) { 0x00414c9d jb 0x414cb2 | 0x00414c9f inc rsi | rsi++; 0x00414ca2 mov rax, qword [rdi] | rax = *(rdi); 0x00414ca5 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00414ca8 mov qword [r14], rax | *(r14) = rax; 0x00414cab cmp qword [r14 + 0x20], 0x17 | | if (*((r14 + 0x20)) != 0x17) { 0x00414cb0 jne 0x414cb5 | goto label_2; | } | } 0x00414cb2 mov rax, r14 | rax = r14; | label_2: 0x00414cb5 mov rdx, qword [r14 + 0x18] | rdx = *((r14 + 0x18)); 0x00414cb9 inc rdx | rdx++; | if (rdx == 0) { 0x00414cbc je 0x414c0f | goto label_0; | } 0x00414cc2 cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) != 0x17) { 0x00414cc7 je 0x414ccc | 0x00414cc9 mov rbx, qword [rbx] | rbx = *(rbx); | } 0x00414ccc mov rdi, rax | rdi = rax; 0x00414ccf mov rsi, rbx | rsi = rbx; 0x00414cd2 add rsp, 8 | 0x00414cd6 pop rbx | 0x00414cd7 pop r14 | 0x00414cd9 jmp 0x403da0 | return memcpy (); | }