; assembly | /* r2dec pseudo code output */ | /* balxml_encoder.t/none @ 0x4e1b40 */ | #include | ; (fcn) method.int_BloombergLP::balxml::Encoder_EncodeValue::executeImp_BloombergLP::s_baltst.MySequenceWithAttributes__BloombergLP::s_baltst::MySequenceWithAttributes_const__int__BloombergLP::bdlat_TypeCategory::Sequence_ () | int64_t method_int_BloombergLP::balxml::Encoder_EncodeValue::executeImp_BloombergLP::s_baltst_MySequenceWithAttributes_BloombergLP::s_baltst::MySequenceWithAttributes_const_int_BloombergLP::bdlat_TypeCategory::Sequence_ (int64_t arg2, int64_t arg1) { | int64_t var_4h; | int64_t var_8h; | int64_t var_10h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balxml::Encoder_EncodeValue::executeImp(BloombergLP::s_baltst::MySequenceWithAttributes const&, int, BloombergLP::bdlat_TypeCategory::Sequence) */ 0x004e1b40 push rbp | 0x004e1b41 push r15 | 0x004e1b43 push r14 | 0x004e1b45 push r13 | 0x004e1b47 push r12 | 0x004e1b49 push rbx | 0x004e1b4a sub rsp, 0x18 | 0x004e1b4e mov r15, rsi | r15 = rsi; 0x004e1b51 mov r14, rdi | r14 = rdi; 0x004e1b54 mov r12, qword [rdi] | r12 = *(rdi); 0x004e1b57 mov ebp, dword [rip + 0x7ef13] | ebp = *(0x00560a70); 0x004e1b5d test ebp, 0x40000 | | if ((ebp & 0x40000) == 0) { 0x004e1b63 jne 0x4e1b73 | 0x004e1b65 test ebp, 0x20000 | | if ((ebp & 0x20000) == 0) { 0x004e1b6b jne 0x4e1b80 | 0x004e1b6d mov dl, 1 | dl = 1; 0x004e1b6f xor ebx, ebx | ebx = 0; 0x004e1b71 jmp 0x4e1bd0 | | } else { 0x004e1b73 mov r13b, 1 | r13b = 1; 0x004e1b76 mov ebx, dword [rip + 0x7eed4] | ebx = BloombergLP::s_baltst::MySequenceWithAttributes::ATTRIBUTE_INFO_ARRAY; 0x004e1b7c xor edx, edx | edx = 0; 0x004e1b7e jmp 0x4e1bd3 | goto label_5; | } 0x004e1b80 lea rdx, [r15 + 0x80] | 0x004e1b87 mov rax, qword [rip + 0x7eeca] | rax = *(str.attribute1); 0x004e1b8e movsxd rcx, dword [rip + 0x7eecb] | rcx = *(0x00560a60); 0x004e1b95 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x004e1b9a mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x004e1b9f mov rdi, qword [r12] | 0x004e1ba3 lea rsi, [rsp + 8] | 0x004e1ba8 mov ecx, ebp | 0x004e1baa call 0x4674e0 | voidBloombergLP::balxml::Formatter::addAttribute(std::_1::basic_string_view>const&,intconst&,int) (*(r12), rsp + 8, r15 + 0x80, ebp); 0x004e1baf mov rax, qword [r12] | rax = *(r12); 0x004e1bb3 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e1bba mov rcx, qword [rax] | rcx = *(rax); 0x004e1bbd mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e1bc1 cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) != 0) { 0x004e1bc6 jne 0x4e1d78 | goto label_6; | } 0x004e1bcc xor ebx, ebx | ebx = 0; 0x004e1bce xor edx, edx | edx = 0; | } 0x004e1bd0 xor r13d, r13d | r13d = 0; | label_5: 0x004e1bd3 mov ebp, dword [rip + 0x7eebf] | ebp = *(0x00560a98); 0x004e1bd9 test ebp, 0x40000 | | if ((ebp & 0x40000) == 0) { 0x004e1bdf jne 0x4e1bed | 0x004e1be1 test ebp, 0x20000 | | if ((ebp & 0x20000) != 0) { 0x004e1be7 jne 0x4e1c65 | goto label_7; | } 0x004e1be9 mov dl, 1 | dl = 1; 0x004e1beb jmp 0x4e1bf6 | | } else { 0x004e1bed mov r13b, 1 | r13b = 1; 0x004e1bf0 mov ebx, dword [rip + 0x7ee82] | ebx = *(0x00560a78); | } | do { | label_0: 0x004e1bf6 mov ebp, dword [rip + 0x7eec4] | ebp = *(0x00560ac0); 0x004e1bfc test ebp, 0x40000 | | if ((ebp & 0x40000) == 0) { 0x004e1c02 jne 0x4e1c14 | 0x004e1c04 test ebp, 0x20000 | | if ((ebp & 0x20000) != 0) { 0x004e1c0a jne 0x4e1cc5 | goto label_8; | } 0x004e1c10 mov dl, 1 | dl = 1; 0x004e1c12 jmp 0x4e1c1d | | } else { 0x004e1c14 mov r13b, 1 | r13b = 1; 0x004e1c17 mov ebx, dword [rip + 0x7ee83] | ebx = *(0x00560aa0); | } | label_1: 0x004e1c1d mov ebp, dword [rip + 0x7eec5] | ebp = *(0x00560ae8); 0x004e1c23 test ebp, 0x40000 | | if ((ebp & 0x40000) == 0) { 0x004e1c29 jne 0x4e1c41 | 0x004e1c2b test ebp, 0x20000 | | if ((ebp & 0x20000) != 0) { 0x004e1c31 jne 0x4e1d28 | goto label_9; | } 0x004e1c37 test r13b, r13b | | if (r13b != 0) { 0x004e1c3a jne 0x4e1c47 | goto label_2; | } 0x004e1c3c jmp 0x4e1dbb | goto label_10; | } 0x004e1c41 mov ebx, dword [rip + 0x7ee81] | ebx = *(0x00560ac8); | label_2: 0x004e1c47 mov rax, qword [r14] | rax = *(r14); 0x004e1c4a mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x004e1c4f lea rsi, [rsp + 8] | 0x004e1c54 mov rdi, r15 | 0x004e1c57 mov edx, ebx | 0x004e1c59 call 0x4e1de0 | eax = intBloombergLP::s_baltst::MySequenceWithAttributes::accessAttribute(BloombergLP::balxml::Encoder_EncodeValue&,int)const (r15, rsp + 8, ebx); | label_3: 0x004e1c5e mov ebx, eax | ebx = eax; 0x004e1c60 jmp 0x4e1d99 | goto label_4; | label_7: 0x004e1c65 mov rax, qword [rip + 0x7ee14] | rax = *(str.attribute2); 0x004e1c6c movsxd rcx, dword [rip + 0x7ee15] | rcx = *(0x00560a88); 0x004e1c73 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x004e1c78 mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x004e1c7d cmp byte [r15 + 0x30], 0 | 0x004e1c82 je 0x4e1bf6 | | } while (*((r15 + 0x30)) == 0); 0x004e1c88 mov dword [rsp + 4], edx | *((rsp + 4)) = edx; 0x004e1c8c mov rdi, qword [r12] | 0x004e1c90 lea rsi, [rsp + 8] | 0x004e1c95 mov rdx, r15 | 0x004e1c98 mov ecx, ebp | 0x004e1c9a call 0x453510 | voidBloombergLP::balxml::Formatter::addAttribute,bsl::allocator>>(std::_1::basic_string_view>const&,bsl::basic_string,bsl::allocator>const&,int) (*(r12), rsp + 8, r15, ebp); 0x004e1c9f mov rax, qword [r12] | rax = *(r12); 0x004e1ca3 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e1caa mov rcx, qword [rax] | rcx = *(rax); 0x004e1cad mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e1cb1 cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) != 0) { 0x004e1cb6 jne 0x4e1d78 | goto label_6; | } 0x004e1cbc mov edx, dword [rsp + 4] | edx = *((rsp + 4)); 0x004e1cc0 jmp 0x4e1bf6 | goto label_0; | label_8: 0x004e1cc5 mov rax, qword [rip + 0x7eddc] | rax = *(str.element1); 0x004e1ccc movsxd rcx, dword [rip + 0x7eddd] | rcx = *(0x00560ab0); 0x004e1cd3 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x004e1cd8 mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x004e1cdd cmp byte [r15 + 0x88], 0 | | if (*((r15 + 0x88)) == 0) { 0x004e1ce5 je 0x4e1c1d | goto label_1; | } 0x004e1ceb mov dword [rsp + 4], edx | *((rsp + 4)) = edx; 0x004e1cef lea rdx, [r15 + 0x84] | 0x004e1cf6 mov rdi, qword [r12] | 0x004e1cfa lea rsi, [rsp + 8] | 0x004e1cff mov ecx, ebp | 0x004e1d01 call 0x4674e0 | voidBloombergLP::balxml::Formatter::addAttribute(std::_1::basic_string_view>const&,intconst&,int) (*(r12), rsp + 8, r15 + 0x84, ebp); 0x004e1d06 mov rax, qword [r12] | rax = *(r12); 0x004e1d0a mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e1d11 mov rcx, qword [rax] | rcx = *(rax); 0x004e1d14 mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e1d18 cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) == 0) { 0x004e1d1d jne 0x4e1d78 | 0x004e1d1f mov edx, dword [rsp + 4] | edx = *((rsp + 4)); 0x004e1d23 jmp 0x4e1c1d | goto label_1; | label_9: 0x004e1d28 mov rax, qword [rip + 0x7eda1] | rax = *(str.element2); 0x004e1d2f movsxd rcx, dword [rip + 0x7eda2] | rcx = *(0x00560ad8); 0x004e1d36 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x004e1d3b mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x004e1d40 cmp byte [r15 + 0x70], 0 | | if (*((r15 + 0x70)) == 0) { 0x004e1d45 je 0x4e1dae | goto label_11; | } 0x004e1d47 mov dword [rsp + 4], edx | *((rsp + 4)) = edx; 0x004e1d4b lea rdx, [r15 + 0x40] | 0x004e1d4f mov rdi, qword [r12] | 0x004e1d53 lea rsi, [rsp + 8] | 0x004e1d58 mov ecx, ebp | 0x004e1d5a call 0x453510 | voidBloombergLP::balxml::Formatter::addAttribute,bsl::allocator>>(std::_1::basic_string_view>const&,bsl::basic_string,bsl::allocator>const&,int) (*(r12), rsp + 8, r15 + 0x40, ebp); 0x004e1d5f mov rax, qword [r12] | rax = *(r12); 0x004e1d63 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e1d6a mov rcx, qword [rax] | rcx = *(rax); 0x004e1d6d mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e1d71 cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) == 0) { 0x004e1d76 je 0x4e1daa | goto label_12; | } | } | label_6: 0x004e1d78 mov rdi, qword [r12 + 8] | 0x004e1d7d lea rdx, [rsp + 8] | 0x004e1d82 mov ebx, 0xffffffff | ebx = 0xffffffff; 0x004e1d87 mov esi, 0x552c63 | 0x004e1d8c mov ecx, ebp | 0x004e1d8e mov r8d, 0xffffffff | 0x004e1d94 call 0x4e51d0 | BloombergLP::balxml::Encoder::logError(char const*,std::_1::basic_string_view>const&,int,int) (*((r12 + 8)), "Failed to encode attribute", rsp + 8, ebp, 0xffffffff); | label_4: 0x004e1d99 mov eax, ebx | eax = ebx; 0x004e1d9b add rsp, 0x18 | 0x004e1d9f pop rbx | 0x004e1da0 pop r12 | 0x004e1da2 pop r13 | 0x004e1da4 pop r14 | 0x004e1da6 pop r15 | 0x004e1da8 pop rbp | 0x004e1da9 ret | return rax; | label_12: 0x004e1daa mov edx, dword [rsp + 4] | edx = *((rsp + 4)); | label_11: 0x004e1dae test r13b, r13b | | if (r13b != 0) { 0x004e1db1 jne 0x4e1c47 | goto label_2; | } 0x004e1db7 test dl, dl | | if (dl != 0) { 0x004e1db9 je 0x4e1dd5 | | label_10: 0x004e1dbb mov rax, qword [r14] | rax = *(r14); 0x004e1dbe mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x004e1dc3 lea rsi, [rsp + 8] | 0x004e1dc8 mov rdi, r15 | 0x004e1dcb call 0x4e1fa0 | intBloombergLP::s_baltst::MySequenceWithAttributes::accessAttributes(BloombergLP::balxml::Encoder_SequenceSecondPass&)const (r15, rsp + 8); 0x004e1dd0 jmp 0x4e1c5e | goto label_3; | } 0x004e1dd5 xor ebx, ebx | ebx = 0; 0x004e1dd7 jmp 0x4e1d99 | goto label_4; | }