; assembly | /* r2dec pseudo code output */ | /* ball_recordjsonformatter.t/none @ 0x41ac70 */ | #include | | uint64_t rotate_right64 (uint64_t value, uint32_t count) { | const uint64_t mask = (CHAR_BIT * sizeof (value)) - 1; | count &= mask; | return (value >> count) | (value << (-count & mask)); | } | ; (fcn) method.BloombergLP::ball._anonymous_namespace_::TimestampFormatter::parse_BloombergLP::bdld::DatumMapRef_ () | uint64_t method_BloombergLP::ball_anonymous_namespace_::TimestampFormatter::parse_BloombergLP::bdld::DatumMapRef_ (int64_t arg_40h, int64_t arg_48h, int64_t arg1, int64_t arg7, int64_t arg8, int64_t arg9, int64_t arg10) { | rdi = arg1; | xmm0 = arg7; | xmm1 = arg8; | xmm2 = arg9; | xmm3 = arg10; | /* BloombergLP::ball::(anonymous namespace)::TimestampFormatter::parse(BloombergLP::bdld::DatumMapRef) */ 0x0041ac70 push rbp | 0x0041ac71 push r15 | 0x0041ac73 push r14 | 0x0041ac75 push r13 | 0x0041ac77 push r12 | 0x0041ac79 push rbx | 0x0041ac7a push rax | 0x0041ac7b mov r12, qword [rsp + 0x48] | r12 = *((rsp + 0x48)); 0x0041ac80 test r12, r12 | | if (r12 == 0) { 0x0041ac83 je 0x41af4d | goto label_2; | } 0x0041ac89 mov r15, rdi | r15 = rdi; 0x0041ac8c lea rax, [rsp + 0x40] | rax = rsp + 0x40; 0x0041ac91 mov rbx, qword [rax] | rbx = *(rax); 0x0041ac94 add rdi, 8 | rdi += 8; 0x0041ac98 add rbx, 0x11 | rbx += 0x11; 0x0041ac9c mov r11d, 0x4030 | r11d = 0x4030; 0x0041aca2 mov r9d, 0x6d726f66 | r9d = 0x6d726f66; 0x0041aca8 movabs r13, 0x656e6f5a656d6974 | r13 = 0x656e6f5a656d6974; 0x0041acb2 movdqa xmm2, xmmword [rip + 0x80a76] | __asm ("movdqa xmm2, xmmword [str.onalSecPrecisionfractionalSecPreA]"); 0x0041acba movdqa xmm3, xmmword [rip + 0x80a7e] | __asm ("movdqa xmm3, xmmword [0x0049b740]"); 0x0041acc2 jmp 0x41acf6 | goto label_3; | label_0: 0x0041acd0 mov ebp, dword [r8] | ebp = *(r8); 0x0041acd3 xor ebp, r9d | ebp ^= r9d; 0x0041acd6 movzx ecx, word [r8 + 4] | ecx = *((r8 + 4)); 0x0041acdb xor ecx, 0x7461 | ecx ^= 0x7461; 0x0041ace1 or ecx, ebp | ecx |= ebp; | if (ecx == 0) { 0x0041ace3 je 0x41add4 | goto label_4; | } | do { | label_1: 0x0041ace9 add rbx, 0x20 | rbx += 0x20; 0x0041aced dec r12 | r12--; | if (r12 == 0) { 0x0041acf0 je 0x41af4d | goto label_2; | } | label_3: 0x0041acf6 movsx ecx, word [rbx + 0xd] | ecx = *((rbx + 0xd)); 0x0041acfa mov eax, 0xffffffff | eax = 0xffffffff; 0x0041acff bt r11, rcx | | if (((r11 >> rcx) & 1) >= 0) { 0x0041ad03 jae 0x41af4f | goto label_5; | } 0x0041ad09 cmp ecx, 0xe | | if (ecx != 0xe) { 0x0041ad0c je 0x41ad30 | 0x0041ad0e cmp ecx, 5 | | if (ecx != 5) { 0x0041ad11 je 0x41ad30 | 0x0041ad13 mov esi, 0 | esi = 0; 0x0041ad18 mov edx, 0 | edx = 0; 0x0041ad1d cmp ecx, 4 | | if (ecx != 4) { 0x0041ad20 jne 0x41ad38 | goto label_6; | } 0x0041ad22 movsx rdx, byte [rbx - 1] | rdx = *((rbx - 1)); 0x0041ad27 mov rsi, rbx | rsi = rbx; 0x0041ad2a jmp 0x41ad38 | | } | } else { 0x0041ad30 mov rsi, qword [rbx - 1] | rsi = *((rbx - 1)); 0x0041ad34 movsxd rdx, dword [rbx + 7] | rdx = *((rbx + 7)); | } | label_6: 0x0041ad38 mov rcx, qword [rbx - 9] | rcx = *((rbx - 9)); 0x0041ad3c lea rbp, [rcx - 4] | rbp = rcx - 4; 0x0041ad40 ror rbp, 1 | rbp = rotate_right64 (rbp, 1); 0x0041ad43 cmp rbp, 9 | 0x0041ad47 ja 0x41ace9 | | } while (rbp > 9); 0x0041ad49 mov r8, qword [rbx - 0x11] | r8 = *((rbx - 0x11)); | /* switch table (10 cases) at 0x49b790 */ 0x0041ad4d jmp qword [rbp*8 + 0x49b790] | 0x0041ad54 cmp dword [r8], 0x656d616e | | if (*(r8) == 0x656d616e) { 0x0041ad5b je 0x41ae6e | goto label_7; | } 0x0041ad61 cmp rcx, 6 | | if (rcx == 6) { 0x0041ad65 je 0x41acd0 | goto label_0; | } 0x0041ad6b cmp rcx, 8 | | if (rcx == 8) { 0x0041ad6f je 0x41adc0 | goto label_8; | } 0x0041ad71 cmp rcx, 0x16 | | if (rcx != 0x16) { 0x0041ad75 jne 0x41ace9 | goto label_1; | } 0x0041ad7b nop dword [rax + rax] | 0x0041ad80 movdqu xmm0, xmmword [r8] | __asm ("movdqu xmm0, xmmword [r8]"); 0x0041ad85 pxor xmm0, xmm3 | xmm0 ^= xmm3; 0x0041ad89 movdqu xmm1, xmmword [r8 + 6] | __asm ("movdqu xmm1, xmmword [r8 + 6]"); 0x0041ad8f pxor xmm1, xmm2 | xmm1 ^= xmm2; 0x0041ad93 por xmm1, xmm0 | xmm1 |= xmm0; 0x0041ad97 ptest xmm1, xmm1 | __asm ("ptest xmm1, xmm1"); | if (rcx == 0x16) { 0x0041ad9c je 0x41ae41 | goto label_9; | } 0x0041ada2 cmp rcx, 6 | | if (rcx == 6) { 0x0041ada6 je 0x41acd0 | goto label_0; | } 0x0041adac cmp rcx, 8 | | if (rcx != 8) { 0x0041adb0 jne 0x41ace9 | goto label_1; | } 0x0041adb6 nop word cs:[rax + rax] | | label_8: 0x0041adc0 cmp qword [r8], r13 | | if (*(r8) == r13) { 0x0041adc3 je 0x41ae08 | goto label_10; | } 0x0041adc5 cmp rcx, 6 | | if (rcx == 6) { 0x0041adc9 je 0x41acd0 | goto label_0; | } 0x0041adcf jmp 0x41ace9 | goto label_1; | label_4: 0x0041add4 cmp rdx, 7 | | if (rdx != 7) { 0x0041add8 je 0x41aeab | 0x0041adde cmp rdx, 8 | | if (rdx != 8) { 0x0041ade2 jne 0x41af4f | goto label_5; | } 0x0041ade8 movabs rcx, 0x746e697250656462 | rcx = 0x746e697250656462; 0x0041adf2 cmp qword [rsi], rcx | | if (*(rsi) != rcx) { 0x0041adf5 jne 0x41af4f | goto label_5; | } 0x0041adfb mov dword [r15 + 0x38], 0 | *((r15 + 0x38)) = 0; 0x0041ae03 jmp 0x41ace9 | goto label_1; | label_10: 0x0041ae08 cmp rdx, 3 | | if (rdx == 3) { 0x0041ae0c je 0x41aed3 | goto label_11; | } 0x0041ae12 cmp rdx, 5 | | if (rdx != 5) { 0x0041ae16 jne 0x41af4f | goto label_5; | } 0x0041ae1c mov ecx, dword [rsi] | ecx = *(rsi); 0x0041ae1e mov edx, 0x61636f6c | edx = 0x61636f6c; 0x0041ae23 xor ecx, edx | ecx ^= edx; 0x0041ae25 movzx edx, byte [rsi + 4] | edx = *((rsi + 4)); 0x0041ae29 xor edx, 0x6c | edx ^= 0x6c; 0x0041ae2c or edx, ecx | edx |= ecx; | if (edx != 0) { 0x0041ae2e jne 0x41af4f | goto label_5; | } 0x0041ae34 mov dword [r15 + 0x3c], 0 | *((r15 + 0x3c)) = 0; 0x0041ae3c jmp 0x41ace9 | goto label_1; | label_9: 0x0041ae41 cmp rdx, 0xc | | if (rdx == 0xc) { 0x0041ae45 je 0x41aef5 | goto label_12; | } 0x0041ae4b cmp rdx, 4 | | if (rdx != 4) { 0x0041ae4f jne 0x41af4f | goto label_5; | } 0x0041ae55 cmp dword [rsi], 0x656e6f6e | | if (*(rsi) != 0x656e6f6e) { 0x0041ae5b jne 0x41af4f | goto label_5; | } 0x0041ae61 mov dword [r15 + 0x40], 0 | *((r15 + 0x40)) = 0; 0x0041ae69 jmp 0x41ace9 | goto label_1; | label_7: 0x0041ae6e mov r14, qword [r15 + 0x20] | r14 = *((r15 + 0x20)); 0x0041ae72 mov qword [r15 + 0x20], 0 | *((r15 + 0x20)) = 0; 0x0041ae7a mov ecx, 0x49bea4 | 0x0041ae7f mov rbp, rdi | 0x0041ae82 call 0x476e40 | eax = bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rdi, rsi, rdx, "string<>::operator=(basic_string_view&): string too long"); 0x0041ae87 movdqa xmm3, xmmword [rip + 0x808b1] | __asm ("movdqa xmm3, xmmword [0x0049b740]"); 0x0041ae8f movdqa xmm2, xmmword [rip + 0x80899] | __asm ("movdqa xmm2, xmmword [str.onalSecPrecisionfractionalSecPreA]"); 0x0041ae97 mov r11d, 0x4030 | r11d = 0x4030; 0x0041ae9d mov r9d, 0x6d726f66 | r9d = 0x6d726f66; 0x0041aea3 mov rdi, rbp | rdi = rbp; 0x0041aea6 jmp 0x41ace9 | goto label_1; | } 0x0041aeab mov ecx, dword [rsi] | ecx = *(rsi); 0x0041aead mov edx, 0x386f7369 | edx = 0x386f7369; 0x0041aeb2 xor ecx, edx | ecx ^= edx; 0x0041aeb4 mov edx, dword [rsi + 3] | edx = *((rsi + 3)); 0x0041aeb7 mov esi, 0x31303638 | esi = 0x31303638; 0x0041aebc xor edx, esi | edx ^= esi; 0x0041aebe or edx, ecx | edx |= ecx; | if (edx == 0) { 0x0041aec0 jne 0x41af4f | 0x0041aec6 mov dword [r15 + 0x38], 1 | *((r15 + 0x38)) = 1; 0x0041aece jmp 0x41ace9 | goto label_1; | label_11: 0x0041aed3 movzx ecx, word [rsi] | ecx = *(rsi); 0x0041aed6 xor ecx, 0x7475 | ecx ^= 0x7475; 0x0041aedc movzx edx, byte [rsi + 2] | edx = *((rsi + 2)); 0x0041aee0 xor edx, 0x63 | edx ^= 0x63; 0x0041aee3 or dx, cx | dx |= cx; | if (dx != 0) { 0x0041aee6 jne 0x41af4f | goto label_5; | } 0x0041aee8 mov dword [r15 + 0x3c], 1 | *((r15 + 0x3c)) = 1; 0x0041aef0 jmp 0x41ace9 | goto label_1; | label_12: 0x0041aef5 mov rcx, qword [rsi] | rcx = *(rsi); 0x0041aef8 movabs rdx, 0x636573696c6c696d | rdx = 0x636573696c6c696d; 0x0041af02 xor rcx, rdx | rcx ^= rdx; 0x0041af05 mov edx, dword [rsi + 8] | edx = *((rsi + 8)); 0x0041af08 xor rdx, 0x73646e6f | rdx ^= 0x73646e6f; 0x0041af0f or rdx, rcx | rdx |= rcx; | if (rdx != 0) { 0x0041af12 je 0x41af40 | 0x0041af14 mov rcx, qword [rsi] | rcx = *(rsi); 0x0041af17 movabs rdx, 0x6365736f7263696d | rdx = 0x6365736f7263696d; 0x0041af21 xor rcx, rdx | rcx ^= rdx; 0x0041af24 mov edx, dword [rsi + 8] | edx = *((rsi + 8)); 0x0041af27 xor rdx, 0x73646e6f | rdx ^= 0x73646e6f; 0x0041af2e or rdx, rcx | rdx |= rcx; | if (rdx != 0) { 0x0041af31 jne 0x41af4f | goto label_5; | } 0x0041af33 mov dword [r15 + 0x40], 6 | *((r15 + 0x40)) = 6; 0x0041af3b jmp 0x41ace9 | goto label_1; | } 0x0041af40 mov dword [r15 + 0x40], 3 | *((r15 + 0x40)) = 3; 0x0041af48 jmp 0x41ace9 | goto label_1; | label_2: 0x0041af4d xor eax, eax | eax = 0; | } | label_5: 0x0041af4f add rsp, 8 | 0x0041af53 pop rbx | 0x0041af54 pop r12 | 0x0041af56 pop r13 | 0x0041af58 pop r14 | 0x0041af5a pop r15 | 0x0041af5c pop rbp | 0x0041af5d ret | return rax; | }