; assembly | /* r2dec pseudo code output */ | /* ball_recordjsonformatter.t/none @ 0x41b280 */ | #include | ; (fcn) method.BloombergLP::ball._anonymous_namespace_::ThreadIdFormatter::parse_BloombergLP::bdld::DatumMapRef_ () | uint64_t method_BloombergLP::ball_anonymous_namespace_::ThreadIdFormatter::parse_BloombergLP::bdld::DatumMapRef_ (int64_t arg_40h, int64_t arg_48h, int64_t arg1) { | rdi = arg1; | /* BloombergLP::ball::(anonymous namespace)::ThreadIdFormatter::parse(BloombergLP::bdld::DatumMapRef) */ 0x0041b280 push rbp | 0x0041b281 push r15 | 0x0041b283 push r14 | 0x0041b285 push r13 | 0x0041b287 push r12 | 0x0041b289 push rbx | 0x0041b28a push rax | 0x0041b28b mov r12, qword [rsp + 0x48] | r12 = *((rsp + 0x48)); 0x0041b290 test r12, r12 | | if (r12 == 0) { 0x0041b293 je 0x41b3b5 | goto label_1; | } 0x0041b299 mov r15, rdi | r15 = rdi; 0x0041b29c lea rax, [rsp + 0x40] | rax = rsp + 0x40; 0x0041b2a1 mov rbx, qword [rax] | rbx = *(rax); 0x0041b2a4 lea rax, [rdi + 8] | rax = rdi + 8; 0x0041b2a8 mov qword [rsp], rax | *(rsp) = rax; 0x0041b2ac add rbx, 0x11 | rbx += 0x11; 0x0041b2b0 mov r13d, 0x4030 | r13d = 0x4030; 0x0041b2b6 mov ebp, 0x6d726f66 | 0x0041b2bb jmp 0x41b2e3 | | while (rdi == 6) { 0x0041b2c0 mov edi, dword [rcx] | edi = *(rcx); 0x0041b2c2 xor edi, ebp | edi ^= ebp; 0x0041b2c4 movzx ecx, word [rcx + 4] | ecx = *((rcx + 4)); 0x0041b2c8 xor ecx, 0x7461 | ecx ^= 0x7461; 0x0041b2ce or ecx, edi | ecx |= edi; | if (ecx == 0) { 0x0041b2d0 je 0x41b363 | goto label_2; | } | label_0: 0x0041b2d6 add rbx, 0x20 | rbx += 0x20; 0x0041b2da dec r12 | r12--; | if (r12 == 0) { 0x0041b2dd je 0x41b3b5 | goto label_1; | } 0x0041b2e3 movsx ecx, word [rbx + 0xd] | ecx = *((rbx + 0xd)); 0x0041b2e7 mov eax, 0xffffffff | eax = 0xffffffff; 0x0041b2ec bt r13, rcx | | if (((r13 >> rcx) & 1) >= 0) { 0x0041b2f0 jae 0x41b3b7 | goto label_3; | } 0x0041b2f6 cmp ecx, 0xe | | if (ecx != 0xe) { 0x0041b2f9 je 0x41b320 | 0x0041b2fb cmp ecx, 5 | | if (ecx != 5) { 0x0041b2fe je 0x41b320 | 0x0041b300 mov esi, 0 | esi = 0; 0x0041b305 mov edx, 0 | edx = 0; 0x0041b30a cmp ecx, 4 | | if (ecx != 4) { 0x0041b30d jne 0x41b328 | goto label_4; | } 0x0041b30f movsx rdx, byte [rbx - 1] | rdx = *((rbx - 1)); 0x0041b314 mov rsi, rbx | rsi = rbx; 0x0041b317 jmp 0x41b328 | | } | } else { 0x0041b320 mov rsi, qword [rbx - 1] | rsi = *((rbx - 1)); 0x0041b324 movsxd rdx, dword [rbx + 7] | rdx = *((rbx + 7)); | } | label_4: 0x0041b328 mov rcx, qword [rbx - 0x11] | rcx = *((rbx - 0x11)); 0x0041b32c mov rdi, qword [rbx - 9] | rdi = *((rbx - 9)); 0x0041b330 cmp rdi, 6 | 0x0041b334 je 0x41b2c0 | | } 0x0041b336 cmp rdi, 4 | | if (rdi != 4) { 0x0041b33a jne 0x41b2d6 | goto label_0; | } 0x0041b33c cmp dword [rcx], 0x656d616e | | if (*(rcx) != 0x656d616e) { 0x0041b342 jne 0x41b2d6 | goto label_0; | } 0x0041b344 mov r14, qword [r15 + 0x20] | r14 = *((r15 + 0x20)); 0x0041b348 mov qword [r15 + 0x20], 0 | *((r15 + 0x20)) = 0; 0x0041b350 mov ecx, 0x49bea4 | 0x0041b355 mov rdi, qword [rsp] | 0x0041b359 call 0x476e40 | eax = bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (*(rsp), rsi, rdx, "string<>::operator=(basic_string_view&): string too long"); 0x0041b35e jmp 0x41b2d6 | goto label_0; | label_2: 0x0041b363 cmp rdx, 3 | | if (rdx != 3) { 0x0041b367 je 0x41b393 | 0x0041b369 cmp rdx, 7 | | if (rdx != 7) { 0x0041b36d jne 0x41b3b7 | goto label_3; | } 0x0041b36f mov ecx, dword [rsi] | ecx = *(rsi); 0x0041b371 mov edx, 0x69636564 | edx = 0x69636564; 0x0041b376 xor ecx, edx | ecx ^= edx; 0x0041b378 mov edx, dword [rsi + 3] | edx = *((rsi + 3)); 0x0041b37b mov esi, 0x6c616d69 | esi = 0x6c616d69; 0x0041b380 xor edx, esi | edx ^= esi; 0x0041b382 or edx, ecx | edx |= ecx; | if (edx != 0) { 0x0041b384 jne 0x41b3b7 | goto label_3; | } 0x0041b386 mov dword [r15 + 0x38], 0 | *((r15 + 0x38)) = 0; 0x0041b38e jmp 0x41b2d6 | goto label_0; | } 0x0041b393 movzx ecx, word [rsi] | ecx = *(rsi); 0x0041b396 xor ecx, 0x6568 | ecx ^= 0x6568; 0x0041b39c movzx edx, byte [rsi + 2] | edx = *((rsi + 2)); 0x0041b3a0 xor edx, 0x78 | edx ^= 0x78; 0x0041b3a3 or dx, cx | dx |= cx; | if (dx == 0) { 0x0041b3a6 jne 0x41b3b7 | 0x0041b3a8 mov dword [r15 + 0x38], 1 | *((r15 + 0x38)) = 1; 0x0041b3b0 jmp 0x41b2d6 | goto label_0; | label_1: 0x0041b3b5 xor eax, eax | eax = 0; | } | label_3: 0x0041b3b7 add rsp, 8 | 0x0041b3bb pop rbx | 0x0041b3bc pop r12 | 0x0041b3be pop r13 | 0x0041b3c0 pop r14 | 0x0041b3c2 pop r15 | 0x0041b3c4 pop rbp | 0x0041b3c5 ret | return rax; | }