; assembly | /* r2dec pseudo code output */ | /* ball_recordjsonformatter.t/none @ 0x41b040 */ | #include | ; (fcn) method.BloombergLP::ball._anonymous_namespace_::FixedFieldFormatter::parse_BloombergLP::bdld::DatumMapRef_ () | uint64_t method_BloombergLP::ball_anonymous_namespace_::FixedFieldFormatter::parse_BloombergLP::bdld::DatumMapRef_ (int64_t arg_40h, int64_t arg_48h, int64_t arg1) { | rdi = arg1; | /* BloombergLP::ball::(anonymous namespace)::FixedFieldFormatter::parse(BloombergLP::bdld::DatumMapRef) */ 0x0041b040 push rbp | 0x0041b041 push r15 | 0x0041b043 push r14 | 0x0041b045 push r13 | 0x0041b047 push r12 | 0x0041b049 push rbx | 0x0041b04a push rax | 0x0041b04b mov r12, qword [rsp + 0x48] | r12 = *((rsp + 0x48)); 0x0041b050 test r12, r12 | | if (r12 == 0) { 0x0041b053 je 0x41b10e | goto label_0; | } 0x0041b059 lea rax, [rsp + 0x40] | rax = rsp + 0x40; 0x0041b05e mov rbx, qword [rax] | rbx = *(rax); 0x0041b061 movzx ecx, word [rbx + 0x1e] | ecx = *((rbx + 0x1e)); 0x0041b065 mov eax, 0xffffffff | eax = 0xffffffff; 0x0041b06a mov r13d, 0x4030 | r13d = 0x4030; 0x0041b070 bt r13, rcx | | if (((r13 >> rcx) & 1) >= 0) { 0x0041b074 jae 0x41b110 | goto label_1; | } 0x0041b07a mov r15, rdi | r15 = rdi; 0x0041b07d lea rax, [rdi + 8] | rax = rdi + 8; 0x0041b081 mov qword [rsp], rax | *(rsp) = rax; 0x0041b085 mov eax, 1 | eax = 1; 0x0041b08a nop word [rax + rax] | | do { 0x0041b090 mov rbp, rax | 0x0041b093 cmp qword [rbx + 8], 4 | | if (*((rbx + 8)) == 4) { 0x0041b098 jne 0x41b0f0 | 0x0041b09a mov rax, qword [rbx] | rax = *(rbx); 0x0041b09d cmp dword [rax], 0x656d616e | | if (*(rax) != 0x656d616e) { 0x0041b0a3 jne 0x41b0f0 | goto label_2; | } 0x0041b0a5 movsx eax, cx | eax = (int32_t) cx; 0x0041b0a8 cmp eax, 0xe | | if (eax != 0xe) { 0x0041b0ab je 0x41b0cc | 0x0041b0ad cmp eax, 5 | | if (eax != 5) { 0x0041b0b0 je 0x41b0cc | 0x0041b0b2 mov esi, 0 | esi = 0; 0x0041b0b7 mov edx, 0 | edx = 0; 0x0041b0bc cmp eax, 4 | | if (eax != 4) { 0x0041b0bf jne 0x41b0d4 | goto label_3; | } 0x0041b0c1 lea rsi, [rbx + 0x11] | rsi = rbx + 0x11; 0x0041b0c5 movsx rdx, byte [rbx + 0x10] | rdx = *((rbx + 0x10)); 0x0041b0ca jmp 0x41b0d4 | | } | } else { 0x0041b0cc mov rsi, qword [rbx + 0x10] | 0x0041b0d0 movsxd rdx, dword [rbx + 0x18] | rdx = *((rbx + 0x18)); | } | label_3: 0x0041b0d4 mov r14, qword [r15 + 0x20] | r14 = *((r15 + 0x20)); 0x0041b0d8 mov qword [r15 + 0x20], 0 | *((r15 + 0x20)) = 0; 0x0041b0e0 mov ecx, 0x49bea4 | 0x0041b0e5 mov rdi, qword [rsp] | 0x0041b0e9 call 0x476e40 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (*(rsp), *((rbx + 0x10)), rdx, "string<>::operator=(basic_string_view&): string too long"); 0x0041b0ee nop | | } | label_2: 0x0041b0f0 cmp r12, rbp | | if (r12 == rbp) { 0x0041b0f3 je 0x41b107 | goto label_4; | } 0x0041b0f5 movzx ecx, word [rbx + 0x3e] | ecx = *((rbx + 0x3e)); 0x0041b0f9 add rbx, 0x20 | rbx += 0x20; 0x0041b0fd lea rax, [rbp + 1] | rax = rbp + 1; 0x0041b101 bt r13, rcx | 0x0041b105 jb 0x41b090 | | } while (((r13 >> rcx) & 1) < 0); | label_4: 0x0041b107 cmp rbp, r12 | 0x0041b10a sbb eax, eax | eax -= eax; 0x0041b10c jmp 0x41b110 | goto label_1; | label_0: 0x0041b10e xor eax, eax | eax = 0; | label_1: 0x0041b110 add rsp, 8 | 0x0041b114 pop rbx | 0x0041b115 pop r12 | 0x0041b117 pop r13 | 0x0041b119 pop r14 | 0x0041b11b pop r15 | 0x0041b11d pop rbp | 0x0041b11e ret | return rax; | }