; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x442a60 */ | #include | ; (fcn) method.int_BloombergLP::balber::BerEncoder.encode_unsigned_long__std::__1::basic_streambuf_char__std::__1::char_traits_char_____unsigned_long_const_ () | int64_t method_int_BloombergLP::balber::BerEncoder_encode_unsigned_long_std::_1::basic_streambuf_char_std::_1::char_traits_char_unsigned_long_const_ (uint32_t arg3, int64_t arg2, int64_t arg1) { | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balber::BerEncoder::encode(std::__1::basic_streambuf >*, unsigned long const&) */ 0x00442a60 push rbp | 0x00442a61 push r15 | 0x00442a63 push r14 | 0x00442a65 push r12 | 0x00442a67 push rbx | 0x00442a68 sub rsp, 0x10 | 0x00442a6c mov r12, rdx | r12 = rdx; 0x00442a6f mov r14, rsi | r14 = rsi; 0x00442a72 mov rbx, rdi | rbx = rdi; 0x00442a75 mov qword [rdi + 0x108], rsi | *((rdi + 0x108)) = rsi; 0x00442a7c mov dword [rdi + 0x100], 0 | *((rdi + 0x100)) = 0; 0x00442a86 mov rbp, qword [rdi + 0xf8] | rbp = *((rdi + 0xf8)); 0x00442a8d test rbp, rbp | | if (rbp != 0) { 0x00442a90 je 0x442aaf | 0x00442a92 mov rsi, qword [rbp + 0x30] | rsi = *((rbp + 0x30)); 0x00442a96 mov rdi, qword [rbp + 0x48] | rdi = *((rbp + 0x48)); 0x00442a9a mov rax, qword [rdi] | rax = *(rdi); 0x00442a9d call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00442aa0 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00442aa3 movups xmmword [rbp + 0x30], xmm0 | __asm ("movups xmmword [rbp + 0x30], xmm0"); 0x00442aa7 mov qword [rbp + 0x40], 0 | *((rbp + 0x40)) = 0; | } 0x00442aaf mov dword [rbx + 0x110], 0 | *((rbx + 0x110)) = 0; 0x00442ab9 cmp qword [rbx], 0 | | if (*(rbx) != 0) { 0x00442abd je 0x442b0a | 0x00442abf mov dword [rbx + 0x110], 1 | *((rbx + 0x110)) = 1; 0x00442ac9 xor r15d, r15d | r15d = 0; 0x00442acc mov rdi, rbx | 0x00442acf mov rsi, r12 | 0x00442ad2 xor edx, edx | 0x00442ad4 mov ecx, 2 | 0x00442ad9 xor r8d, r8d | r8d = 0; 0x00442adc call 0x44dc00 | eax = intBloombergLP::balber::BerEncoder::encodeImpl(unsigned longconst&,BloombergLP::balber::BerConstants::TagClass,int,int,BloombergLP::bdlat_TypeCategory::Simple) (rbx, r12, 0, 2); 0x00442ae1 test eax, eax | | if (eax != 0) { 0x00442ae3 je 0x442b02 | 0x00442ae5 mov r15d, 0xffffffff | r15d = 0xffffffff; 0x00442aeb mov rdi, rbx | 0x00442aee xor esi, esi | 0x00442af0 mov edx, 2 | 0x00442af5 xor ecx, ecx | 0x00442af7 mov r8d, 0xffffffff | 0x00442afd call 0x452720 | BloombergLP::balber::BerEncoder::logError(BloombergLP::balber::BerConstants::TagClass,int,char const*,int) (rbx, 0, 2, 0, 0xffffffff); | } 0x00442b02 dec dword [rbx + 0x110] | *((rbx + 0x110))--; 0x00442b08 jmp 0x442b6c | | } else { 0x00442b0a mov r15, rsp | r15 = rsp; 0x00442b0d mov rdi, r15 | rdi = rsp; 0x00442b10 call 0x453260 | BloombergLP::balber::BerEncoderOptions::BerEncoderOptions() (); 0x00442b15 mov qword [rbx], r15 | *(rbx) = r15; 0x00442b18 inc dword [rbx + 0x110] | *((rbx + 0x110))++; 0x00442b1e xor r15d, r15d | r15d = 0; 0x00442b21 mov rdi, rbx | 0x00442b24 mov rsi, r12 | 0x00442b27 xor edx, edx | 0x00442b29 mov ecx, 2 | 0x00442b2e xor r8d, r8d | r8d = 0; 0x00442b31 call 0x44dc00 | eax = intBloombergLP::balber::BerEncoder::encodeImpl(unsigned longconst&,BloombergLP::balber::BerConstants::TagClass,int,int,BloombergLP::bdlat_TypeCategory::Simple) (rbx, r12, 0, 2); 0x00442b36 test eax, eax | | if (eax != 0) { 0x00442b38 je 0x442b57 | 0x00442b3a mov r15d, 0xffffffff | r15d = 0xffffffff; 0x00442b40 mov rdi, rbx | 0x00442b43 xor esi, esi | 0x00442b45 mov edx, 2 | 0x00442b4a xor ecx, ecx | 0x00442b4c mov r8d, 0xffffffff | 0x00442b52 call 0x452720 | BloombergLP::balber::BerEncoder::logError(BloombergLP::balber::BerConstants::TagClass,int,char const*,int) (rbx, 0, 2, 0, 0xffffffff); | } 0x00442b57 mov qword [rbx], 0 | *(rbx) = 0; 0x00442b5e dec dword [rbx + 0x110] | *((rbx + 0x110))--; 0x00442b64 mov rdi, rsp | rdi = rsp; 0x00442b67 call 0x4532b0 | BloombergLP::balber::BerEncoderOptions::~BerEncoderOptions() (); | } 0x00442b6c mov qword [rbx + 0x108], 0 | *((rbx + 0x108)) = 0; 0x00442b77 mov rax, qword [r14] | rax = *(r14); 0x00442b7a mov rdi, r14 | rdi = r14; 0x00442b7d call qword [rax + 0x30] | uint64_t (*rax + 0x30)() (); 0x00442b80 mov eax, r15d | eax = r15d; 0x00442b83 add rsp, 0x10 | 0x00442b87 pop rbx | 0x00442b88 pop r12 | 0x00442b8a pop r14 | 0x00442b8c pop r15 | 0x00442b8e pop rbp | 0x00442b8f ret | return rax; | }