; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x445510 */ | #include | ; (fcn) method.int_BloombergLP::s_baltst::MyChoiceWithDefaultValues::accessSelection_BloombergLP::balber.BerEncoder_Visitor__BloombergLP::balber::BerEncoder_Visitor__const () | int64_t method_int_BloombergLP::s_baltst::MyChoiceWithDefaultValues::accessSelection_BloombergLP::balber_BerEncoder_Visitor_BloombergLP::balber::BerEncoder_Visitor_const (int64_t arg2, int64_t arg1) { | int64_t var_4h; | uint32_t var_8h; | int64_t var_10h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::s_baltst::MyChoiceWithDefaultValues::accessSelection(BloombergLP::balber::BerEncoder_Visitor&) const */ 0x00445510 push rbp | 0x00445511 push r15 | 0x00445513 push r14 | 0x00445515 push r13 | 0x00445517 push r12 | 0x00445519 push rbx | 0x0044551a sub rsp, 0x18 | 0x0044551e mov r14, rsi | r14 = rsi; 0x00445521 mov rbx, rdi | rbx = rdi; 0x00445524 mov eax, dword [rdi + 0x30] | eax = *((rdi + 0x30)); 0x00445527 cmp eax, 2 | | if (eax != 2) { 0x0044552a je 0x445573 | 0x0044552c cmp eax, 1 | | if (eax == 1) { 0x0044552f je 0x4455bd | goto label_0; | } 0x00445535 test eax, eax | | if (eax != 0) { 0x00445537 jne 0x445661 | goto label_1; | } 0x0044553d mov rdi, qword [r14] | 0x00445540 xor r13d, r13d | r13d = 0; 0x00445543 mov rsi, rbx | 0x00445546 mov edx, 0x80 | 0x0044554b xor ecx, ecx | 0x0044554d mov r8d, 1 | r8d = 1; 0x00445553 call 0x444b70 | eax = intBloombergLP::balber::BerEncoder::encodeImpl(intconst&,BloombergLP::balber::BerConstants::TagClass,int,int,BloombergLP::bdlat_TypeCategory::Simple) (*(r14), rbx, 0x80, 0); 0x00445558 test eax, eax | | if (eax == 0) { 0x0044555a je 0x445667 | goto label_2; | } 0x00445560 mov ebx, eax | ebx = eax; 0x00445562 mov rdi, qword [r14] | rdi = *(r14); 0x00445565 mov ecx, 0x497818 | ecx = "selection0"; 0x0044556a mov esi, 0x80 | esi = 0x80; 0x0044556f xor edx, edx | edx = 0; 0x00445571 jmp 0x4455aa | | } else { 0x00445573 mov rdi, qword [r14] | 0x00445576 xor r13d, r13d | r13d = 0; 0x00445579 mov rsi, rbx | 0x0044557c mov edx, 0x80 | 0x00445581 mov ecx, 2 | 0x00445586 xor r8d, r8d | r8d = 0; 0x00445589 call 0x445680 | eax = intBloombergLP::balber::BerEncoder::encodeImpl(BloombergLP::s_baltst::MyEnumeration::Valueconst&,BloombergLP::balber::BerConstants::TagClass,int,int,BloombergLP::bdlat_TypeCategory::Enumeration) (*(r14), rbx, 0x80, 2); 0x0044558e test eax, eax | | if (eax == 0) { 0x00445590 je 0x445667 | goto label_2; | } 0x00445596 mov ebx, eax | ebx = eax; 0x00445598 mov rdi, qword [r14] | 0x0044559b mov ecx, 0x49782e | 0x004455a0 mov esi, 0x80 | 0x004455a5 mov edx, 2 | | } 0x004455aa mov r8d, 0xffffffff | 0x004455b0 call 0x452720 | BloombergLP::balber::BerEncoder::logError(BloombergLP::balber::BerConstants::TagClass,int,char const*,int) (*(r14), 0x80, 2, "selection2", 0xffffffff); 0x004455b5 mov r13d, ebx | r13d = ebx; 0x004455b8 jmp 0x445667 | goto label_2; | label_0: 0x004455bd mov rbp, qword [r14] | rbp = *(r14); 0x004455c0 mov rdi, qword [rbp + 0x108] | 0x004455c7 xor r13d, r13d | r13d = 0; 0x004455ca mov esi, 0x80 | 0x004455cf xor edx, edx | 0x004455d1 mov ecx, 1 | 0x004455d6 call 0x453b30 | eax = BloombergLP::balber::BerUtil::putIdentifierOctets(std::_1::basic_streambuf>*,BloombergLP::balber::BerConstants::TagClass,BloombergLP::balber::BerConstants::TagType,int) (*((rbp + 0x108)), 0x80, 0, 1); 0x004455db mov dword [rsp + 4], eax | *((rsp + 4)) = eax; 0x004455df mov r12, qword [rbp + 0x108] | r12 = *((rbp + 0x108)); 0x004455e6 mov rax, qword [rbx + 0x20] | rax = *((rbx + 0x20)); 0x004455ea mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x004455ef mov rax, qword [rbx] | rax = *(rbx); 0x004455f2 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x004455f7 mov r15, qword [rbx + 0x18] | r15 = *((rbx + 0x18)); 0x004455fb mov rdi, r12 | 0x004455fe mov esi, r15d | 0x00445601 call 0x453df0 | eax = BloombergLP::balber::BerUtil_LengthImpUtil::putLength(std::_1::basic_streambuf>*,int) (r12, r15d); 0x00445606 mov ebp, 0xffffffff | 0x0044560b test eax, eax | | if (eax == 0) { 0x0044560d jne 0x445639 | 0x0044560f cmp qword [rsp + 8], 0x17 | 0x00445615 mov rsi, qword [rsp + 0x10] | rsi = *((rsp + 0x10)); | if (*((rsp + 8)) == 0x17) { 0x0044561a cmove rsi, rbx | rsi = rbx; | } 0x0044561e movsxd rbx, r15d | rbx = (int64_t) r15d; 0x00445621 mov rax, qword [r12] | rax = *(r12); 0x00445625 mov rdi, r12 | rdi = r12; 0x00445628 mov rdx, rbx | rdx = rbx; 0x0044562b call qword [rax + 0x60] | rax = uint64_t (*rax + 0x60)() (); 0x0044562e xor ebp, ebp | ebp = 0; 0x00445630 cmp rax, rbx | 0x00445633 setne bpl | bpl = (rax != rbx) ? 1 : 0; 0x00445637 neg ebp | ebp = -ebp; | } 0x00445639 or ebp, dword [rsp + 4] | ebp |= *((rsp + 4)); | if (ebp != 0) { 0x0044563d je 0x445667 | 0x0044563f mov rdi, qword [r14] | 0x00445642 mov ecx, 0x497823 | 0x00445647 mov esi, 0x80 | 0x0044564c mov edx, 1 | 0x00445651 mov r8d, 0xffffffff | 0x00445657 call 0x452720 | BloombergLP::balber::BerEncoder::logError(BloombergLP::balber::BerConstants::TagClass,int,char const*,int) (*(r14), 0x80, 1, "selection1", 0xffffffff); 0x0044565c mov r13d, ebp | r13d = ebp; 0x0044565f jmp 0x445667 | goto label_2; | label_1: 0x00445661 mov r13d, 0xffffffff | r13d = 0xffffffff; | } | label_2: 0x00445667 mov eax, r13d | eax = 0xffffffff; 0x0044566a add rsp, 0x18 | 0x0044566e pop rbx | 0x0044566f pop r12 | 0x00445671 pop r13 | 0x00445673 pop r14 | 0x00445675 pop r15 | 0x00445677 pop rbp | 0x00445678 ret | return rax; | }