; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/assume @ 0x42a7d0 */ | #include | ; (fcn) method.BloombergLP::bdlpcre::RegEx.prepareImp_char__unsigned_long__unsigned_long__char_const__int__unsigned_long_ () | uint64_t method_BloombergLP::bdlpcre::RegEx_prepareImp_char_unsigned_long_unsigned_long_char_const_int_unsigned_long_ (int64_t arg6, char * arg5, char * arg4, char * arg3, char * arg2, char * arg1) { | int64_t var_ch; | char * var_10h; | char * dest; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlpcre::RegEx::prepareImp(char*, unsigned long, unsigned long*, char const*, int, unsigned long) */ 0x0042a7d0 push rbp | 0x0042a7d1 push r15 | 0x0042a7d3 push r14 | 0x0042a7d5 push r13 | 0x0042a7d7 push r12 | 0x0042a7d9 push rbx | 0x0042a7da sub rsp, 0x38 | 0x0042a7de mov ebp, r9d | 0x0042a7e1 mov r13, r8 | r13 = r8; 0x0042a7e4 mov r12, rcx | r12 = rcx; 0x0042a7e7 mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0042a7ec mov qword [rsp + 0x18], rsi | *((rsp + 0x18)) = rsi; 0x0042a7f1 mov rbx, rdi | rbx = rdi; 0x0042a7f4 mov rdi, qword [rdi + 0x48] | rdi = *((rdi + 0x48)); 0x0042a7f8 test rdi, rdi | | if (rdi != 0) { 0x0042a7fb je 0x42a823 | 0x0042a7fd call 0x455db0 | pcre2_code_free_8 (); 0x0042a802 mov qword [rbx + 0x48], 0 | *((rbx + 0x48)) = 0; 0x0042a80a mov dword [rbx], 0 | *(rbx) = 0; 0x0042a810 mov qword [rbx + 0x58], 0 | *((rbx + 0x58)) = 0; 0x0042a818 lea rdi, [rbx + 8] | 0x0042a81c xor esi, esi | esi = 0; 0x0042a81e call 0x433b10 | bsl::basic_string,bsl::allocator>::privateClear(bool) (rbx + 8); | } 0x0042a823 lea r14, [rbx + 8] | r14 = rbx + 8; 0x0042a827 mov rdi, r13 | 0x0042a82a call 0x403bd0 | rax = strlen (r13); 0x0042a82f mov r15, qword [rbx + 0x20] | r15 = *((rbx + 0x20)); 0x0042a833 mov qword [rbx + 0x20], 0 | *((rbx + 0x20)) = 0; 0x0042a83b mov ecx, 0x4da257 | 0x0042a840 mov rdi, r14 | 0x0042a843 mov rsi, r13 | 0x0042a846 mov rdx, rax | 0x0042a849 call 0x433750 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (r14, r13, rax, "string<...>::assign(char*...): string too long"); 0x0042a84e mov dword [rbx], ebp | *(rbx) = ebp; 0x0042a850 mov qword [rbx + 0x58], 0 | *((rbx + 0x58)) = 0; 0x0042a858 movd xmm0, ebp | xmm0 = ebp; 0x0042a85c pshufd xmm0, xmm0, 0 | __asm ("pshufd xmm0, xmm0, 0"); 0x0042a861 pmulld xmm0, xmmword [rip + 0xafcf6] | __asm ("pmulld xmm0, xmmword [0x004da560]"); 0x0042a86a pand xmm0, xmmword [rip + 0xafcfe] | xmm0 &= *(0x004da570); 0x0042a872 pshufd xmm1, xmm0, 0xee | __asm ("pshufd xmm1, xmm0, 0xee"); 0x0042a877 por xmm1, xmm0 | xmm1 |= xmm0; 0x0042a87b pshufd xmm0, xmm1, 0x55 | __asm ("pshufd xmm0, xmm1, 0x55"); 0x0042a880 por xmm0, xmm1 | xmm0 |= xmm1; 0x0042a884 movd edx, xmm0 | edx = xmm0; 0x0042a888 mov r9, qword [rbx + 0x40] | r9 = *((rbx + 0x40)); 0x0042a88c lea rcx, [rsp + 0xc] | rcx = rsp + 0xc; 0x0042a891 lea r8, [rsp + 0x30] | r8 = rsp + 0x30; 0x0042a896 mov rdi, r13 | rdi = r13; 0x0042a899 mov rsi, 0xffffffffffffffff | rsi = 0xffffffffffffffff; 0x0042a8a0 call 0x456b90 | rax = pcre2_compile_8 (); 0x0042a8a5 test rax, rax | | if (rax != 0) { 0x0042a8a8 je 0x42a943 | 0x0042a8ae mov r14, rax | r14 = rax; 0x0042a8b1 mov qword [rsp + 0x20], r12 | *((rsp + 0x20)) = r12; 0x0042a8b6 mov rbp, qword [rbx + 0x60] | rbp = *((rbx + 0x60)); 0x0042a8ba mov r15, qword [rbx + 0x38] | r15 = *((rbx + 0x38)); 0x0042a8be mov r12d, dword [rbx + 0x50] | r12d = *((rbx + 0x50)); 0x0042a8c2 mov r13, qword [rbx + 0x58] | r13 = *((rbx + 0x58)); 0x0042a8c6 lea rax, [rbp + 0x28] | rax = rbp + 0x28; 0x0042a8ca mov qword [rsp + 0x28], rax | *((rsp + 0x28)) = rax; 0x0042a8cf mov rdi, qword [rbp + 0x30] | rdi = *((rbp + 0x30)); 0x0042a8d3 call 0x4cc070 | pcre2_match_data_free_8 (); 0x0042a8d8 mov rdi, qword [rbp + 0x38] | rdi = *((rbp + 0x38)); 0x0042a8dc call 0x47e0f0 | pcre2_jit_stack_free_8 (); 0x0042a8e1 mov rdi, qword [rbp + 0x28] | rdi = *((rbp + 0x28)); 0x0042a8e5 call 0x4627d0 | pcre2_match_context_free_8 (); 0x0042a8ea call 0x403cb0 | rax = pthread_self (); 0x0042a8ef mov qword [rbp + 0x20], rax | *((rbp + 0x20)) = rax; 0x0042a8f3 mov qword [rbp], r15 | *(rbp) = r15; 0x0042a8f7 mov qword [rbp + 8], r14 | *((rbp + 8)) = r14; 0x0042a8fb mov dword [rbp + 0x10], r12d | *((rbp + 0x10)) = r12d; 0x0042a8ff mov qword [rbp + 0x18], r13 | *((rbp + 0x18)) = r13; 0x0042a903 mov rdi, rbp | 0x0042a906 mov rsi, qword [rsp + 0x28] | 0x0042a90b call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, *((rsp + 0x28))); 0x0042a910 test eax, eax | | if (eax != 0) { 0x0042a912 je 0x42a975 | 0x0042a914 mov rdi, r14 | rdi = r14; 0x0042a917 call 0x455db0 | pcre2_code_free_8 (); 0x0042a91c mov esi, 0x4da588 | 0x0042a921 mov rdi, qword [rsp + 0x18] | 0x0042a926 mov rdx, qword [rsp + 0x10] | 0x0042a92b call 0x403fa0 | strncpy (*((rsp + 0x18)), "Unable to create match contexts.", *((rsp + 0x10))); 0x0042a930 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0042a935 mov qword [rax], 0 | *(rax) = 0; 0x0042a93c mov eax, 0xffffffff | eax = 0xffffffff; 0x0042a941 jmp 0x42a97b | | } else { 0x0042a943 mov edi, dword [rsp + 0xc] | edi = *((rsp + 0xc)); 0x0042a947 mov rbx, qword [rsp + 0x18] | rbx = *((rsp + 0x18)); 0x0042a94c mov rsi, rbx | rsi = *((rsp + 0x18)); 0x0042a94f mov rdx, qword [rsp + 0x10] | rdx = *((rsp + 0x10)); 0x0042a954 call 0x462970 | eax = pcre2_get_error_message_8 (); 0x0042a959 test eax, eax | | if (eax < 0) { 0x0042a95b jns 0x42a965 | 0x0042a95d cmp eax, 0xffffffd0 | | if (eax == 0xffffffd0) { 0x0042a960 je 0x42a965 | goto label_0; | } 0x0042a962 mov byte [rbx], 0 | *(rbx) = 0; | } | label_0: 0x0042a965 mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x0042a96a mov qword [r12], rax | *(r12) = rax; 0x0042a96e mov eax, 0xffffffff | eax = 0xffffffff; 0x0042a973 jmp 0x42a97b | | } else { 0x0042a975 mov qword [rbx + 0x48], r14 | *((rbx + 0x48)) = r14; 0x0042a979 xor eax, eax | eax = 0; | } | } 0x0042a97b add rsp, 0x38 | 0x0042a97f pop rbx | 0x0042a980 pop r12 | 0x0042a982 pop r13 | 0x0042a984 pop r14 | 0x0042a986 pop r15 | 0x0042a988 pop rbp | 0x0042a989 ret | return rax; | }