; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/none @ 0x42bbc0 */ | #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_90h, 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; | int64_t var_48h; | int64_t var_50h; | 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 */ 0x0042bbc0 push rbp | 0x0042bbc1 push r15 | 0x0042bbc3 push r14 | 0x0042bbc5 push r13 | 0x0042bbc7 push r12 | 0x0042bbc9 push rbx | 0x0042bbca sub rsp, 0x58 | 0x0042bbce mov rbp, r9 | 0x0042bbd1 mov r13, r8 | r13 = r8; 0x0042bbd4 mov r14, rcx | r14 = rcx; 0x0042bbd7 mov qword [rsp + 0x48], rdx | *((rsp + 0x48)) = rdx; 0x0042bbdc mov r12, rsi | r12 = rsi; 0x0042bbdf mov qword [rsp + 0x28], rdi | *((rsp + 0x28)) = rdi; 0x0042bbe4 mov r15, qword [rdi + 0x60] | r15 = *((rdi + 0x60)); 0x0042bbe8 call 0x403cb0 | rax = pthread_self (); 0x0042bbed mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; 0x0042bbf2 cmp qword [r15 + 0x20], rax | | if (*((r15 + 0x20)) == rax) { 0x0042bbf6 jne 0x42bc0d | 0x0042bbf8 mov rax, qword [r15 + 0x38] | rax = *((r15 + 0x38)); 0x0042bbfc mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x0042bc01 movups xmm0, xmmword [r15 + 0x28] | __asm ("movups xmm0, xmmword [r15 + 0x28]"); 0x0042bc06 movaps xmmword [rsp + 0x30], xmm0 | *((rsp + 0x30)) = xmm0; 0x0042bc0b jmp 0x42bc28 | | } else { 0x0042bc0d lea rsi, [rsp + 0x30] | 0x0042bc12 mov rdi, r15 | 0x0042bc15 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (r15, rsp + 0x30); 0x0042bc1a mov r15d, 0xffffffff | r15d = 0xffffffff; 0x0042bc20 test eax, eax | | if (eax != 0) { 0x0042bc22 jne 0x42bd8a | goto label_1; | } | } 0x0042bc28 mov eax, ebp | eax = ebp; 0x0042bc2a shl eax, 0xf | eax <<= 0xf; 0x0042bc2d movzx eax, ax | eax = (int32_t) ax; 0x0042bc30 mov ecx, ebp | ecx = ebp; 0x0042bc32 shl ecx, 7 | ecx <<= 7; 0x0042bc35 mov edx, ecx | edx = ecx; 0x0042bc37 and edx, 0x100 | edx &= 0x100; 0x0042bc3d and ecx, 0x200 | ecx &= 0x200; 0x0042bc43 mov esi, ebp | esi = ebp; 0x0042bc45 and esi, 8 | esi &= 8; 0x0042bc48 shl esi, 8 | esi <<= 8; 0x0042bc4b and ebp, 0x10 | ebp &= 0x10; 0x0042bc4e shl ebp, 6 | ebp <<= 6; 0x0042bc51 movzx edi, byte [rsp + 0x90] | edi = *((rsp + 0x90)); 0x0042bc59 shl edi, 0x1e | edi <<= 0x1e; 0x0042bc5c or edi, edx | edi |= edx; 0x0042bc5e or edi, eax | edi |= eax; 0x0042bc60 or edi, ecx | edi |= ecx; 0x0042bc62 or edi, esi | edi |= esi; 0x0042bc64 lea eax, [rbp + rdi + 0x1000] | eax = rbp + rdi + 0x1000; 0x0042bc6b mov dword [rsp + 0x14], eax | *((rsp + 0x14)) = eax; 0x0042bc6f mov rax, qword [r12 + 0x18] | rax = *((r12 + 0x18)); 0x0042bc74 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0042bc79 mov rcx, qword [rsp + 0x30] | rcx = *((rsp + 0x30)); 0x0042bc7e mov qword [rsp + 0x20], rcx | *((rsp + 0x20)) = rcx; 0x0042bc83 mov rcx, qword [rsp + 0x38] | rcx = *((rsp + 0x38)); 0x0042bc88 mov qword [rsp + 0x18], rcx | *((rsp + 0x18)) = rcx; 0x0042bc8d mov rsi, rax | rsi = rax; 0x0042bc90 cmp rsi, rax | | if (rsi <= rax) { 0x0042bc93 jbe 0x42bcb4 | goto label_0; | } 0x0042bc95 nop word cs:[rax + rax] | 0x0042bc9f nop | | do { 0x0042bca0 cmp rsi, 0xffffffffffffffff | | if (rsi == -1) { 0x0042bca4 je 0x42bd9c | goto label_2; | } 0x0042bcaa mov rdi, r12 | 0x0042bcad xor edx, edx | 0x0042bcaf call 0x434510 | bsl::basic_string,bsl::allocator>::privateResizeRaw(unsigned long,char) (r12, rsi, 0); | label_0: 0x0042bcb4 mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x0042bcb9 mov rdi, qword [rax + 0x48] | rdi = *((rax + 0x48)); 0x0042bcbd mov rsi, qword [r14] | rsi = *(r14); 0x0042bcc0 mov rdx, qword [r14 + 8] | rdx = *((r14 + 8)); 0x0042bcc4 mov r10, qword [r13] | r10 = *(r13); 0x0042bcc8 mov rbp, qword [r13 + 8] | rbp = *((r13 + 8)); 0x0042bccc cmp qword [r12 + 0x20], 0x17 | | if (*((r12 + 0x20)) == 0x17) { 0x0042bcd2 jne 0x42bce0 | 0x0042bcd4 mov rbx, r12 | rbx = r12; 0x0042bcd7 jmp 0x42bce4 | | } else { 0x0042bce0 mov rbx, qword [r12] | rbx = *(r12); | } 0x0042bce4 sub rsp, 8 | 0x0042bce8 xor ecx, ecx | ecx = 0; 0x0042bcea mov r8d, dword [rsp + 0x1c] | r8d = *((rsp + 0x1c)); 0x0042bcef mov r9, qword [rsp + 0x20] | r9 = *((rsp + 0x20)); 0x0042bcf4 lea rax, [rsp + 0x10] | rax = rsp + 0x10; 0x0042bcf9 push rax | 0x0042bcfa push rbx | 0x0042bcfb push rbp | 0x0042bcfc push r10 | 0x0042bcfe push qword [rsp + 0x48] | 0x0042bd02 call 0x4d0840 | eax = pcre2_substitute_8 (); 0x0042bd07 add rsp, 0x30 | 0x0042bd0b cmp eax, 0xffffffd0 | | if (eax != 0xffffffd0) { 0x0042bd0e jne 0x42bd21 | goto label_3; | } 0x0042bd10 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0042bd15 mov rax, qword [r12 + 0x18] | rax = *((r12 + 0x18)); 0x0042bd1a cmp rsi, rax | 0x0042bd1d ja 0x42bca0 | | } while (rsi > rax); 0x0042bd1f jmp 0x42bcb4 | goto label_0; | label_3: 0x0042bd21 mov r15d, eax | r15d = eax; 0x0042bd24 test eax, eax | | if (eax >= 0) { 0x0042bd26 js 0x42bd3f | 0x0042bd28 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0042bd2d cmp rsi, 0xffffffffffffffff | | if (rsi == -1) { 0x0042bd31 je 0x42bd9c | goto label_2; | } 0x0042bd33 mov rdi, r12 | 0x0042bd36 xor edx, edx | 0x0042bd38 call 0x434510 | bsl::basic_string,bsl::allocator>::privateResizeRaw(unsigned long,char) (r12, rsi, 0); 0x0042bd3d jmp 0x42bd58 | | } else { 0x0042bd3f cmp r15d, 0xffffffff | | if (r15d != 0xffffffff) { 0x0042bd43 je 0x42bd4a | 0x0042bd45 mov r15d, dword [rsp + 8] | r15d = *((rsp + 8)); | } 0x0042bd4a mov rax, qword [rsp + 0x48] | rax = *((rsp + 0x48)); 0x0042bd4f mov dword [rax], r15d | *(rax) = r15d; 0x0042bd52 mov r15d, 0xffffffff | r15d = 0xffffffff; | } 0x0042bd58 mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x0042bd5d mov rax, qword [rax + 0x60] | rax = *((rax + 0x60)); 0x0042bd61 mov rcx, qword [rsp + 0x50] | rcx = *((rsp + 0x50)); 0x0042bd66 cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042bd6a je 0x42bd8a | 0x0042bd6c mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042bd71 call 0x4cc220 | pcre2_match_data_free_8 (); 0x0042bd76 mov rdi, qword [rsp + 0x40] | rdi = *((rsp + 0x40)); 0x0042bd7b call 0x47e2a0 | pcre2_jit_stack_free_8 (); 0x0042bd80 mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0042bd85 call 0x462980 | pcre2_match_context_free_8 (); | } | label_1: 0x0042bd8a mov eax, r15d | eax = r15d; 0x0042bd8d add rsp, 0x58 | 0x0042bd91 pop rbx | 0x0042bd92 pop r12 | 0x0042bd94 pop r13 | 0x0042bd96 pop r14 | 0x0042bd98 pop r15 | 0x0042bd9a pop rbp | 0x0042bd9b ret | return rax; | label_2: 0x0042bd9c mov edi, 0x4da807 | 0x0042bda1 call 0x431bd0 | return BloombergLP::bslstl::StdExceptUtil::throwLengthError(char const*) ("string<...>::resize(n): string too long"); | }