; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/assume @ 0x42abf0 */ | #include | ; (fcn) method.int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre._anonymous_namespace_::NOP__BloombergLP::bdlpcre::_anonymous_namespace_::NOP_const__char_const__unsigned_long__unsigned_long__bool__const () | uint64_t method_int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre_anonymous_namespace_::NOP_BloombergLP::bdlpcre::_anonymous_namespace_::NOP_const_char_const_unsigned_long_unsigned_long_bool_const (int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_30h; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bdlpcre::RegEx::matchImp(BloombergLP::bdlpcre::(anonymous namespace)::NOP const&, char const*, unsigned long, unsigned long, bool) const */ 0x0042abf0 push rbp | 0x0042abf1 push r15 | 0x0042abf3 push r14 | 0x0042abf5 push r13 | 0x0042abf7 push r12 | 0x0042abf9 push rbx | 0x0042abfa sub rsp, 0x38 | 0x0042abfe mov r13d, r8d | r13d = r8d; 0x0042ac01 mov qword [rsp + 0x30], rcx | *((rsp + 0x30)) = rcx; 0x0042ac06 mov r12, rdx | r12 = rdx; 0x0042ac09 mov r15, rsi | r15 = rsi; 0x0042ac0c mov rbx, rdi | rbx = rdi; 0x0042ac0f mov rbp, qword [rdi + 0x60] | rbp = *((rdi + 0x60)); 0x0042ac13 call 0x403cb0 | rax = pthread_self (); 0x0042ac18 mov r14, rax | r14 = rax; 0x0042ac1b cmp qword [rbp + 0x20], rax | | if (*((rbp + 0x20)) == rax) { 0x0042ac1f jne 0x42ac35 | 0x0042ac21 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x0042ac25 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0042ac2a movups xmm0, xmmword [rbp + 0x28] | __asm ("movups xmm0, xmmword [rbp + 0x28]"); 0x0042ac2e movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0042ac33 jmp 0x42ac4f | | } else { 0x0042ac35 lea rsi, [rsp + 0x10] | 0x0042ac3a mov rdi, rbp | 0x0042ac3d call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, rsp + 0x10); 0x0042ac42 mov ebp, 0xffffffff | 0x0042ac47 test eax, eax | | if (eax != 0) { 0x0042ac49 jne 0x42ad06 | goto label_0; | } | } 0x0042ac4f test r15, r15 | 0x0042ac52 mov esi, 0x4dfabc | esi = 0x4dfabc; | if (r15 != 0) { 0x0042ac57 cmovne rsi, r15 | rsi = r15; | } 0x0042ac5b test byte [rbx], 8 | | if ((*(rbx) & 8) != 0) { 0x0042ac5e je 0x42ac84 | 0x0042ac60 test r13b, r13b | | if (r13b == 0) { 0x0042ac63 jne 0x42ac84 | 0x0042ac65 mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0042ac69 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0042ac6e mov r9, qword [rsp + 0x18] | r9 = *((rsp + 0x18)); 0x0042ac73 mov qword [rsp], rax | *(rsp) = rax; 0x0042ac77 mov rdx, r12 | rdx = r12; 0x0042ac7a mov rcx, qword [rsp + 0x30] | rcx = *((rsp + 0x30)); 0x0042ac7f xor r8d, r8d | r8d = 0; 0x0042ac82 jmp 0x42aca4 | | } | } else { 0x0042ac84 mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0042ac88 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0042ac8d mov r9, qword [rsp + 0x18] | r9 = *((rsp + 0x18)); 0x0042ac92 mov qword [rsp], rax | *(rsp) = rax; 0x0042ac96 mov rdx, r12 | rdx = r12; 0x0042ac99 mov rcx, qword [rsp + 0x30] | rcx = *((rsp + 0x30)); 0x0042ac9e mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042aca4 call 0x4ba620 | eax = pcre2_match_8 (); 0x0042aca9 cmp eax, 0xffffffd1 | | if (eax != 0xffffffd1) { 0x0042acac je 0x42acba | 0x0042acae cmp eax, 0xffffffd2 | | if (eax == 0xffffffd2) { 0x0042acb1 jne 0x42acc1 | 0x0042acb3 mov ebp, 2 | 0x0042acb8 jmp 0x42acde | | } else { 0x0042acba mov ebp, 1 | 0x0042acbf jmp 0x42acde | | } else { 0x0042acc1 mov ebp, eax | | } 0x0042acc3 sar ebp, 0x1f | ebp >>= 0x1f; 0x0042acc6 test eax, eax | | if (eax < 0) { 0x0042acc8 js 0x42acde | goto label_1; | } 0x0042acca mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042accf call 0x4cc0b0 | pcre2_get_ovector_pointer_8 (); 0x0042acd4 mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042acd9 call 0x4cc0c0 | pcre2_get_ovector_count_8 (); | } | label_1: 0x0042acde mov rax, qword [rbx + 0x60] | rax = *((rbx + 0x60)); 0x0042ace2 cmp qword [rax + 0x20], r14 | | if (*((rax + 0x20)) != r14) { 0x0042ace6 je 0x42ad06 | 0x0042ace8 mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042aced call 0x4cc070 | pcre2_match_data_free_8 (); 0x0042acf2 mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0042acf7 call 0x47e0f0 | pcre2_jit_stack_free_8 (); 0x0042acfc mov rdi, qword [rsp + 0x10] | rdi = *((rsp + 0x10)); 0x0042ad01 call 0x4627d0 | pcre2_match_context_free_8 (); | } | label_0: 0x0042ad06 mov eax, ebp | eax = ebp; 0x0042ad08 add rsp, 0x38 | 0x0042ad0c pop rbx | 0x0042ad0d pop r12 | 0x0042ad0f pop r13 | 0x0042ad11 pop r14 | 0x0042ad13 pop r15 | 0x0042ad15 pop rbp | 0x0042ad16 ret | return rax; | }