; assembly | /* r2dec pseudo code output */ | /* balxml_decoder.t/assume @ 0x4405c0 */ | #include | ; (fcn) method.GenerateXmlElement.operator___BloombergLP::bslstl::StringRefImp_char__const__BloombergLP::bslstl::StringRefImp_char__const__const () | int64_t method_GenerateXmlElement_operator_BloombergLP::bslstl::StringRefImp_char_const_BloombergLP::bslstl::StringRefImp_char_const_const (int64_t arg4, char * arg3, int64_t arg1) { | int64_t var_8h; | int64_t var_18h; | uint32_t var_20h; | int64_t var_28h; | int64_t var_30h; | rcx = arg4; | rdx = arg3; | rdi = arg1; | /* GenerateXmlElement::operator()(BloombergLP::bslstl::StringRefImp const&, BloombergLP::bslstl::StringRefImp const&) const */ 0x004405c0 push r15 | 0x004405c2 push r14 | 0x004405c4 push rbx | 0x004405c5 sub rsp, 0x40 | 0x004405c9 mov rbx, rdx | rbx = rdx; 0x004405cc mov r14, rdi | r14 = rdi; 0x004405cf mov r15, rsp | r15 = rsp; 0x004405d2 mov rdi, r15 | 0x004405d5 mov rsi, rcx | 0x004405d8 call 0x448930 | TestXmlUtil::generateContent(BloombergLP::bslstl::StringRefImpconst&) (rsp, rcx); 0x004405dd mov rdi, r14 | 0x004405e0 mov rsi, rbx | 0x004405e3 mov rdx, r15 | 0x004405e6 xor ecx, ecx | 0x004405e8 call 0x4457d0 | TestXmlElement::TestXmlElement(BloombergLP::bslstl::StringRefImpconst&,BloombergLP::bdlb::Variant>,bsl::basic_string,bsl::allocator>>const&,BloombergLP::bslma::Allocator*) (r14, rbx, r15, 0); 0x004405ed mov eax, dword [rsp + 0x30] | eax = *((rsp + 0x30)); 0x004405f1 lea ecx, [rax - 3] | ecx = rax - 3; 0x004405f4 cmp ecx, 0x12 | 0x004405f7 jae 0x440606 | | while (eax == 0) { | label_0: 0x004405f9 mov rax, r14 | rax = r14; 0x004405fc add rsp, 0x40 | 0x00440600 pop rbx | 0x00440601 pop r14 | 0x00440603 pop r15 | 0x00440605 ret | return rax; 0x00440606 test eax, eax | 0x00440608 je 0x4405f9 | | } 0x0044060a cmp eax, 2 | | if (eax != 2) { 0x0044060d jne 0x440628 | goto label_1; | } 0x0044060f cmp qword [rsp + 0x20], 0x17 | | if (*((rsp + 0x20)) == 0x17) { 0x00440615 je 0x4405f9 | goto label_0; | } 0x00440617 mov rsi, qword [rsp] | rsi = *(rsp); 0x0044061b mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x00440620 mov rax, qword [rdi] | rax = *(rdi); 0x00440623 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00440626 jmp 0x4405f9 | goto label_0; | label_1: 0x00440628 mov rbx, qword [rsp] | rbx = *(rsp); 0x0044062c test rbx, rbx | | if (rbx == 0) { 0x0044062f je 0x4405f9 | goto label_0; | } 0x00440631 mov r15, qword [rsp + 8] | r15 = *((rsp + 8)); 0x00440636 cmp rbx, r15 | | if (rbx == r15) { 0x00440639 je 0x440658 | goto label_2; | } 0x0044063b nop dword [rax + rax] | | do { 0x00440640 mov rdi, rbx | 0x00440643 call 0x4441b0 | TestXmlElement::~TestXmlElement() (rbx); 0x00440648 add rbx, 0x90 | rbx += 0x90; 0x0044064f cmp r15, rbx | 0x00440652 jne 0x440640 | | } while (r15 != rbx); 0x00440654 mov rbx, qword [rsp] | rbx = *(rsp); | label_2: 0x00440658 mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0044065d mov rax, qword [rdi] | rax = *(rdi); 0x00440660 mov rsi, rbx | rsi = rbx; 0x00440663 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00440666 jmp 0x4405f9 | goto label_0; | }