; assembly | /* r2dec pseudo code output */ | /* ball_recordjsonformatter.t/assume @ 0x419c40 */ | #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) */ 0x00419c40 push rbp | 0x00419c41 push r15 | 0x00419c43 push r14 | 0x00419c45 push r13 | 0x00419c47 push r12 | 0x00419c49 push rbx | 0x00419c4a push rax | 0x00419c4b mov r12, qword [rsp + 0x48] | r12 = *((rsp + 0x48)); 0x00419c50 test r12, r12 | | if (r12 == 0) { 0x00419c53 je 0x419f0d | goto label_2; | } 0x00419c59 mov r15, rdi | r15 = rdi; 0x00419c5c lea rax, [rsp + 0x40] | rax = rsp + 0x40; 0x00419c61 mov rbx, qword [rax] | rbx = *(rax); 0x00419c64 add rdi, 8 | rdi += 8; 0x00419c68 add rbx, 0x11 | rbx += 0x11; 0x00419c6c mov r11d, 0x4030 | r11d = 0x4030; 0x00419c72 mov r9d, 0x6d726f66 | r9d = 0x6d726f66; 0x00419c78 movabs r13, 0x656e6f5a656d6974 | r13 = 0x656e6f5a656d6974; 0x00419c82 movdqa xmm2, xmmword [rip + 0x80036] | __asm ("movdqa xmm2, xmmword [str.onalSecPrecisionfractionalSecPre]"); 0x00419c8a movdqa xmm3, xmmword [rip + 0x8003e] | __asm ("movdqa xmm3, xmmword [0x00499cd0]"); 0x00419c92 jmp 0x419cc6 | goto label_3; | label_0: 0x00419ca0 mov ebp, dword [r8] | ebp = *(r8); 0x00419ca3 xor ebp, r9d | ebp ^= r9d; 0x00419ca6 movzx ecx, word [r8 + 4] | ecx = *((r8 + 4)); 0x00419cab xor ecx, 0x7461 | ecx ^= 0x7461; 0x00419cb1 or ecx, ebp | ecx |= ebp; | if (ecx == 0) { 0x00419cb3 je 0x419d94 | goto label_4; | } | do { | label_1: 0x00419cb9 add rbx, 0x20 | rbx += 0x20; 0x00419cbd dec r12 | r12--; | if (r12 == 0) { 0x00419cc0 je 0x419f0d | goto label_2; | } | label_3: 0x00419cc6 movsx ecx, word [rbx + 0xd] | ecx = *((rbx + 0xd)); 0x00419cca mov eax, 0xffffffff | eax = 0xffffffff; 0x00419ccf bt r11, rcx | | if (((r11 >> rcx) & 1) >= 0) { 0x00419cd3 jae 0x419f0f | goto label_5; | } 0x00419cd9 cmp ecx, 0xe | | if (ecx != 0xe) { 0x00419cdc je 0x419ce3 | 0x00419cde cmp ecx, 5 | | if (ecx != 5) { 0x00419ce1 jne 0x419cf0 | goto label_6; | } | } 0x00419ce3 mov rsi, qword [rbx - 1] | rsi = *((rbx - 1)); 0x00419ce7 movsxd rdx, dword [rbx + 7] | rdx = *((rbx + 7)); 0x00419ceb jmp 0x419cf8 | goto label_7; | label_6: 0x00419cf0 movsx rdx, byte [rbx - 1] | rdx = *((rbx - 1)); 0x00419cf5 mov rsi, rbx | rsi = rbx; | label_7: 0x00419cf8 mov rcx, qword [rbx - 9] | rcx = *((rbx - 9)); 0x00419cfc lea rbp, [rcx - 4] | rbp = rcx - 4; 0x00419d00 ror rbp, 1 | rbp = rotate_right64 (rbp, 1); 0x00419d03 cmp rbp, 9 | 0x00419d07 ja 0x419cb9 | | } while (rbp > 9); 0x00419d09 mov r8, qword [rbx - 0x11] | r8 = *((rbx - 0x11)); | /* switch table (10 cases) at 0x499d20 */ 0x00419d0d jmp qword [rbp*8 + 0x499d20] | 0x00419d14 cmp dword [r8], 0x656d616e | | if (*(r8) == 0x656d616e) { 0x00419d1b je 0x419e2e | goto label_8; | } 0x00419d21 cmp rcx, 6 | | if (rcx == 6) { 0x00419d25 je 0x419ca0 | goto label_0; | } 0x00419d2b cmp rcx, 8 | | if (rcx == 8) { 0x00419d2f je 0x419d80 | goto label_9; | } 0x00419d31 cmp rcx, 0x16 | | if (rcx != 0x16) { 0x00419d35 jne 0x419cb9 | goto label_1; | } 0x00419d37 nop word [rax + rax] | 0x00419d40 movdqu xmm0, xmmword [r8] | __asm ("movdqu xmm0, xmmword [r8]"); 0x00419d45 pxor xmm0, xmm3 | xmm0 ^= xmm3; 0x00419d49 movdqu xmm1, xmmword [r8 + 6] | __asm ("movdqu xmm1, xmmword [r8 + 6]"); 0x00419d4f pxor xmm1, xmm2 | xmm1 ^= xmm2; 0x00419d53 por xmm1, xmm0 | xmm1 |= xmm0; 0x00419d57 ptest xmm1, xmm1 | __asm ("ptest xmm1, xmm1"); | if (rcx == 0x16) { 0x00419d5c je 0x419e01 | goto label_10; | } 0x00419d62 cmp rcx, 6 | | if (rcx == 6) { 0x00419d66 je 0x419ca0 | goto label_0; | } 0x00419d6c cmp rcx, 8 | | if (rcx != 8) { 0x00419d70 jne 0x419cb9 | goto label_1; | } 0x00419d76 nop word cs:[rax + rax] | | label_9: 0x00419d80 cmp qword [r8], r13 | | if (*(r8) == r13) { 0x00419d83 je 0x419dc8 | goto label_11; | } 0x00419d85 cmp rcx, 6 | | if (rcx == 6) { 0x00419d89 je 0x419ca0 | goto label_0; | } 0x00419d8f jmp 0x419cb9 | goto label_1; | label_4: 0x00419d94 cmp rdx, 7 | | if (rdx != 7) { 0x00419d98 je 0x419e6b | 0x00419d9e cmp rdx, 8 | | if (rdx != 8) { 0x00419da2 jne 0x419f0f | goto label_5; | } 0x00419da8 movabs rcx, 0x746e697250656462 | rcx = 0x746e697250656462; 0x00419db2 cmp qword [rsi], rcx | | if (*(rsi) != rcx) { 0x00419db5 jne 0x419f0f | goto label_5; | } 0x00419dbb mov dword [r15 + 0x38], 0 | *((r15 + 0x38)) = 0; 0x00419dc3 jmp 0x419cb9 | goto label_1; | label_11: 0x00419dc8 cmp rdx, 3 | | if (rdx == 3) { 0x00419dcc je 0x419e93 | goto label_12; | } 0x00419dd2 cmp rdx, 5 | | if (rdx != 5) { 0x00419dd6 jne 0x419f0f | goto label_5; | } 0x00419ddc mov ecx, dword [rsi] | ecx = *(rsi); 0x00419dde mov edx, 0x61636f6c | edx = 0x61636f6c; 0x00419de3 xor ecx, edx | ecx ^= edx; 0x00419de5 movzx edx, byte [rsi + 4] | edx = *((rsi + 4)); 0x00419de9 xor edx, 0x6c | edx ^= 0x6c; 0x00419dec or edx, ecx | edx |= ecx; | if (edx != 0) { 0x00419dee jne 0x419f0f | goto label_5; | } 0x00419df4 mov dword [r15 + 0x3c], 0 | *((r15 + 0x3c)) = 0; 0x00419dfc jmp 0x419cb9 | goto label_1; | label_10: 0x00419e01 cmp rdx, 0xc | | if (rdx == 0xc) { 0x00419e05 je 0x419eb5 | goto label_13; | } 0x00419e0b cmp rdx, 4 | | if (rdx != 4) { 0x00419e0f jne 0x419f0f | goto label_5; | } 0x00419e15 cmp dword [rsi], 0x656e6f6e | | if (*(rsi) != 0x656e6f6e) { 0x00419e1b jne 0x419f0f | goto label_5; | } 0x00419e21 mov dword [r15 + 0x40], 0 | *((r15 + 0x40)) = 0; 0x00419e29 jmp 0x419cb9 | goto label_1; | label_8: 0x00419e2e mov r14, qword [r15 + 0x20] | r14 = *((r15 + 0x20)); 0x00419e32 mov qword [r15 + 0x20], 0 | *((r15 + 0x20)) = 0; 0x00419e3a mov ecx, 0x49a434 | 0x00419e3f mov rbp, rdi | 0x00419e42 call 0x4753c0 | eax = bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rdi, rsi, rdx, "string<>::operator=(basic_string_view&): string too long"); 0x00419e47 movdqa xmm3, xmmword [rip + 0x7fe81] | __asm ("movdqa xmm3, xmmword [0x00499cd0]"); 0x00419e4f movdqa xmm2, xmmword [rip + 0x7fe69] | __asm ("movdqa xmm2, xmmword [str.onalSecPrecisionfractionalSecPre]"); 0x00419e57 mov r11d, 0x4030 | r11d = 0x4030; 0x00419e5d mov r9d, 0x6d726f66 | r9d = 0x6d726f66; 0x00419e63 mov rdi, rbp | rdi = rbp; 0x00419e66 jmp 0x419cb9 | goto label_1; | } 0x00419e6b mov ecx, dword [rsi] | ecx = *(rsi); 0x00419e6d mov edx, 0x386f7369 | edx = 0x386f7369; 0x00419e72 xor ecx, edx | ecx ^= edx; 0x00419e74 mov edx, dword [rsi + 3] | edx = *((rsi + 3)); 0x00419e77 mov esi, 0x31303638 | esi = 0x31303638; 0x00419e7c xor edx, esi | edx ^= esi; 0x00419e7e or edx, ecx | edx |= ecx; | if (edx == 0) { 0x00419e80 jne 0x419f0f | 0x00419e86 mov dword [r15 + 0x38], 1 | *((r15 + 0x38)) = 1; 0x00419e8e jmp 0x419cb9 | goto label_1; | label_12: 0x00419e93 movzx ecx, word [rsi] | ecx = *(rsi); 0x00419e96 xor ecx, 0x7475 | ecx ^= 0x7475; 0x00419e9c movzx edx, byte [rsi + 2] | edx = *((rsi + 2)); 0x00419ea0 xor edx, 0x63 | edx ^= 0x63; 0x00419ea3 or dx, cx | dx |= cx; | if (dx != 0) { 0x00419ea6 jne 0x419f0f | goto label_5; | } 0x00419ea8 mov dword [r15 + 0x3c], 1 | *((r15 + 0x3c)) = 1; 0x00419eb0 jmp 0x419cb9 | goto label_1; | label_13: 0x00419eb5 mov rcx, qword [rsi] | rcx = *(rsi); 0x00419eb8 movabs rdx, 0x636573696c6c696d | rdx = 0x636573696c6c696d; 0x00419ec2 xor rcx, rdx | rcx ^= rdx; 0x00419ec5 mov edx, dword [rsi + 8] | edx = *((rsi + 8)); 0x00419ec8 xor rdx, 0x73646e6f | rdx ^= 0x73646e6f; 0x00419ecf or rdx, rcx | rdx |= rcx; | if (rdx != 0) { 0x00419ed2 je 0x419f00 | 0x00419ed4 mov rcx, qword [rsi] | rcx = *(rsi); 0x00419ed7 movabs rdx, 0x6365736f7263696d | rdx = 0x6365736f7263696d; 0x00419ee1 xor rcx, rdx | rcx ^= rdx; 0x00419ee4 mov edx, dword [rsi + 8] | edx = *((rsi + 8)); 0x00419ee7 xor rdx, 0x73646e6f | rdx ^= 0x73646e6f; 0x00419eee or rdx, rcx | rdx |= rcx; | if (rdx != 0) { 0x00419ef1 jne 0x419f0f | goto label_5; | } 0x00419ef3 mov dword [r15 + 0x40], 6 | *((r15 + 0x40)) = 6; 0x00419efb jmp 0x419cb9 | goto label_1; | } 0x00419f00 mov dword [r15 + 0x40], 3 | *((r15 + 0x40)) = 3; 0x00419f08 jmp 0x419cb9 | goto label_1; | label_2: 0x00419f0d xor eax, eax | eax = 0; | } | label_5: 0x00419f0f add rsp, 8 | 0x00419f13 pop rbx | 0x00419f14 pop r12 | 0x00419f16 pop r13 | 0x00419f18 pop r14 | 0x00419f1a pop r15 | 0x00419f1c pop rbp | 0x00419f1d ret | return rax; | }