; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/assume @ 0x42b9f0 */ | #include | ; (fcn) method.int_BloombergLP::bdlpcre::RegEx::replaceImp_bsl::basic_string_char__std::__1::char_traits_char___bsl.allocator_char______bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____int__std::__1::basic_string_view_char__std::__1 () | uint64_t method_int_BloombergLP::bdlpcre::RegEx::replaceImp_bsl::basic_string_char_std::_1::char_traits_char_bsl_allocator_char_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_int_std::_1::basic_string_view_char_std::_1 (int64_t arg_80h, int64_t arg6, int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_14h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bdlpcre::RegEx::replaceImp, bsl::allocator > >(bsl::basic_string, bsl::allocator >*, int*, std::__1::basic_string_view > const&, std::__1::basic_string_view > const&, unsigned long, bool) const */ 0x0042b9f0 push rbp | 0x0042b9f1 push r15 | 0x0042b9f3 push r14 | 0x0042b9f5 push r13 | 0x0042b9f7 push r12 | 0x0042b9f9 push rbx | 0x0042b9fa sub rsp, 0x48 | 0x0042b9fe mov rbx, r9 | rbx = r9; 0x0042ba01 mov r13, r8 | r13 = r8; 0x0042ba04 mov r12, rcx | r12 = rcx; 0x0042ba07 mov qword [rsp + 0x38], rdx | *((rsp + 0x38)) = rdx; 0x0042ba0c mov r15, rsi | r15 = rsi; 0x0042ba0f mov qword [rsp + 0x18], rdi | *((rsp + 0x18)) = rdi; 0x0042ba14 mov r14, qword [rdi + 0x60] | r14 = *((rdi + 0x60)); 0x0042ba18 call 0x403cb0 | rax = pthread_self (); 0x0042ba1d mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x0042ba22 cmp qword [r14 + 0x20], rax | | if (*((r14 + 0x20)) == rax) { 0x0042ba26 jne 0x42ba3d | 0x0042ba28 mov rax, qword [r14 + 0x38] | rax = *((r14 + 0x38)); 0x0042ba2c mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0042ba31 movups xmm0, xmmword [r14 + 0x28] | __asm ("movups xmm0, xmmword [r14 + 0x28]"); 0x0042ba36 movaps xmmword [rsp + 0x20], xmm0 | *((rsp + 0x20)) = xmm0; 0x0042ba3b jmp 0x42ba58 | | } else { 0x0042ba3d lea rsi, [rsp + 0x20] | 0x0042ba42 mov rdi, r14 | 0x0042ba45 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (r14, rsp + 0x20); 0x0042ba4a mov r14d, 0xffffffff | r14d = 0xffffffff; 0x0042ba50 test eax, eax | | if (eax != 0) { 0x0042ba52 jne 0x42bba5 | goto label_1; | } | } 0x0042ba58 mov eax, ebx | eax = ebx; 0x0042ba5a shl eax, 0xf | eax <<= 0xf; 0x0042ba5d movzx eax, ax | eax = (int32_t) ax; 0x0042ba60 mov ecx, ebx | ecx = ebx; 0x0042ba62 shl ecx, 7 | ecx <<= 7; 0x0042ba65 mov edx, ecx | edx = ecx; 0x0042ba67 and edx, 0x100 | edx &= 0x100; 0x0042ba6d and ecx, 0x200 | ecx &= 0x200; 0x0042ba73 mov esi, ebx | esi = ebx; 0x0042ba75 and esi, 8 | esi &= 8; 0x0042ba78 shl esi, 8 | esi <<= 8; 0x0042ba7b and ebx, 0x10 | ebx &= 0x10; 0x0042ba7e shl ebx, 6 | ebx <<= 6; 0x0042ba81 movzx edi, byte [rsp + 0x80] | edi = *((rsp + 0x80)); 0x0042ba89 shl edi, 0x1e | edi <<= 0x1e; 0x0042ba8c or edi, edx | edi |= edx; 0x0042ba8e or edi, eax | edi |= eax; 0x0042ba90 or edi, ecx | edi |= ecx; 0x0042ba92 or edi, esi | edi |= esi; 0x0042ba94 lea eax, [rbx + rdi + 0x1000] | eax = rbx + rdi + 0x1000; 0x0042ba9b mov dword [rsp + 0x14], eax | *((rsp + 0x14)) = eax; 0x0042ba9f mov rax, qword [r15 + 0x18] | rax = *((r15 + 0x18)); 0x0042baa3 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0042baa8 mov rsi, rax | rsi = rax; 0x0042baab cmp rsi, rax | 0x0042baae jbe 0x42bac4 | | while (rsi > rax) { 0x0042bab0 cmp rsi, 0xffffffffffffffff | | if (rsi == -1) { 0x0042bab4 je 0x42bbb7 | goto label_2; | } 0x0042baba mov rdi, r15 | 0x0042babd xor edx, edx | 0x0042babf call 0x434340 | bsl::basic_string,bsl::allocator>::privateResizeRaw(unsigned long,char) (r15, rsi, 0); | label_0: 0x0042bac4 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x0042bac9 mov rdi, qword [rax + 0x48] | rdi = *((rax + 0x48)); 0x0042bacd mov rsi, qword [r12] | rsi = *(r12); 0x0042bad1 mov rdx, qword [r12 + 8] | rdx = *((r12 + 8)); 0x0042bad6 mov r10, qword [rsp + 0x20] | r10 = *((rsp + 0x20)); 0x0042badb mov r9, qword [rsp + 0x28] | r9 = *((rsp + 0x28)); 0x0042bae0 mov r11, qword [r13] | r11 = *(r13); 0x0042bae4 mov rbx, qword [r13 + 8] | rbx = *((r13 + 8)); 0x0042bae8 cmp qword [r15 + 0x20], 0x17 | | if (*((r15 + 0x20)) == 0x17) { 0x0042baed jne 0x42bb00 | 0x0042baef mov rax, r15 | rax = r15; 0x0042baf2 jmp 0x42bb03 | | } else { 0x0042bb00 mov rax, qword [r15] | rax = *(r15); | } 0x0042bb03 sub rsp, 8 | 0x0042bb07 xor ecx, ecx | ecx = 0; 0x0042bb09 mov r8d, dword [rsp + 0x1c] | r8d = *((rsp + 0x1c)); 0x0042bb0e lea rbp, [rsp + 0x10] | rbp = rsp + 0x10; 0x0042bb13 push rbp | 0x0042bb14 push rax | 0x0042bb15 push rbx | 0x0042bb16 push r11 | 0x0042bb18 push r10 | 0x0042bb1a call 0x4d0690 | eax = pcre2_substitute_8 (); 0x0042bb1f add rsp, 0x30 | 0x0042bb23 cmp eax, 0xffffffd0 | | if (eax != 0xffffffd0) { 0x0042bb26 jne 0x42bb3c | goto label_3; | } 0x0042bb28 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0042bb2d mov rax, qword [r15 + 0x18] | rax = *((r15 + 0x18)); 0x0042bb31 cmp rsi, rax | 0x0042bb34 ja 0x42bab0 | | } 0x0042bb3a jmp 0x42bac4 | goto label_0; | label_3: 0x0042bb3c mov r14d, eax | r14d = eax; 0x0042bb3f test eax, eax | | if (eax >= 0) { 0x0042bb41 js 0x42bb5a | 0x0042bb43 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0042bb48 cmp rsi, 0xffffffffffffffff | | if (rsi == -1) { 0x0042bb4c je 0x42bbb7 | goto label_2; | } 0x0042bb4e mov rdi, r15 | 0x0042bb51 xor edx, edx | 0x0042bb53 call 0x434340 | bsl::basic_string,bsl::allocator>::privateResizeRaw(unsigned long,char) (r15, rsi, 0); 0x0042bb58 jmp 0x42bb73 | | } else { 0x0042bb5a cmp r14d, 0xffffffff | | if (r14d != 0xffffffff) { 0x0042bb5e je 0x42bb65 | 0x0042bb60 mov r14d, dword [rsp + 8] | r14d = *((rsp + 8)); | } 0x0042bb65 mov rax, qword [rsp + 0x38] | rax = *((rsp + 0x38)); 0x0042bb6a mov dword [rax], r14d | *(rax) = r14d; 0x0042bb6d mov r14d, 0xffffffff | r14d = 0xffffffff; | } 0x0042bb73 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x0042bb78 mov rax, qword [rax + 0x60] | rax = *((rax + 0x60)); 0x0042bb7c mov rcx, qword [rsp + 0x40] | rcx = *((rsp + 0x40)); 0x0042bb81 cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042bb85 je 0x42bba5 | 0x0042bb87 mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042bb8c call 0x4cc070 | pcre2_match_data_free_8 (); 0x0042bb91 mov rdi, qword [rsp + 0x30] | rdi = *((rsp + 0x30)); 0x0042bb96 call 0x47e0f0 | pcre2_jit_stack_free_8 (); 0x0042bb9b mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0042bba0 call 0x4627d0 | pcre2_match_context_free_8 (); | } | label_1: 0x0042bba5 mov eax, r14d | eax = r14d; 0x0042bba8 add rsp, 0x48 | 0x0042bbac pop rbx | 0x0042bbad pop r12 | 0x0042bbaf pop r13 | 0x0042bbb1 pop r14 | 0x0042bbb3 pop r15 | 0x0042bbb5 pop rbp | 0x0042bbb6 ret | return rax; | label_2: 0x0042bbb7 mov edi, 0x4da63f | 0x0042bbbc call 0x431a00 | return BloombergLP::bslstl::StdExceptUtil::throwLengthError(char const*) ("string<...>::resize(n): string too long"); | }