; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/none @ 0x4466b0 */ | #include | ; (fcn) method.int_BloombergLP::balber::BerUtil_IntegerImpUtil.putIntegerValue_unsigned_short__std::__1::basic_streambuf_char__std::__1::char_traits_char_____unsigned_short_ () | uint64_t method_int_BloombergLP::balber::BerUtil_IntegerImpUtil_putIntegerValue_unsigned_short_std::_1::basic_streambuf_char_std::_1::char_traits_char_unsigned_short_ (int64_t arg2, int64_t arg1) { | int64_t var_5h; | int64_t var_6h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balber::BerUtil_IntegerImpUtil::putIntegerValue(std::__1::basic_streambuf >*, unsigned short) */ 0x004466b0 push rbp | 0x004466b1 push r15 | 0x004466b3 push r14 | 0x004466b5 push r13 | 0x004466b7 push r12 | 0x004466b9 push rbx | 0x004466ba push rax | 0x004466bb mov r14d, esi | r14d = esi; 0x004466be mov r13, rdi | r13 = rdi; 0x004466c1 test r14w, r14w | | if (r14w != 0) { 0x004466c5 je 0x4466dc | | if (r14w < 0) { 0x004466c7 js 0x4466e6 | goto label_1; | } 0x004466c9 movzx eax, r14w | eax = (int32_t) r14w; 0x004466cd cmp eax, 0x80 | 0x004466d2 mov ebp, 2 | 0x004466d7 sbb ebp, 0 | 0x004466da jmp 0x4466e1 | | } else { 0x004466dc mov ebp, 1 | | } 0x004466e1 xor r12d, r12d | r12d = 0; 0x004466e4 jmp 0x4466ee | goto label_2; | label_1: 0x004466e6 mov ebp, 3 | 0x004466eb mov r12b, 1 | r12b = 1; | label_2: 0x004466ee mov rax, qword [r13 + 0x30] | rax = *((r13 + 0x30)); 0x004466f2 cmp rax, qword [r13 + 0x38] | | if (rax != *((r13 + 0x38))) { 0x004466f6 je 0x446707 | 0x004466f8 lea rcx, [rax + 1] | rcx = rax + 1; 0x004466fc mov qword [r13 + 0x30], rcx | *((r13 + 0x30)) = rcx; 0x00446700 mov byte [rax], bpl | *(rax) = bpl; 0x00446703 mov eax, ebp | eax = ebp; 0x00446705 jmp 0x446713 | | } else { 0x00446707 mov rax, qword [r13] | rax = *(r13); 0x0044670b mov rdi, r13 | rdi = r13; 0x0044670e mov esi, ebp | esi = ebp; 0x00446710 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x00446713 mov r15d, 0xffffffff | r15d = 0xffffffff; 0x00446719 cmp ebp, eax | | if (ebp != eax) { 0x0044671b jne 0x4467b2 | goto label_3; | } 0x00446721 mov word [rsp + 6], r14w | *((rsp + 6)) = r14w; 0x00446727 test r12b, r12b | | if (r12b != 0) { 0x0044672a je 0x446764 | 0x0044672c mov r15d, 0xffffffff | r15d = 0xffffffff; 0x00446732 test r14w, r14w | | if (r14w >= 0) { 0x00446736 jns 0x4467b2 | goto label_3; | } 0x00446738 mov rax, qword [r13 + 0x30] | rax = *((r13 + 0x30)); 0x0044673c cmp rax, qword [r13 + 0x38] | | if (rax != *((r13 + 0x38))) { 0x00446740 je 0x44674f | 0x00446742 lea rcx, [rax + 1] | rcx = rax + 1; 0x00446746 mov qword [r13 + 0x30], rcx | *((r13 + 0x30)) = rcx; 0x0044674a mov byte [rax], 0 | *(rax) = 0; 0x0044674d jmp 0x44675f | | } else { 0x0044674f mov rax, qword [r13] | rax = *(r13); 0x00446753 mov rdi, r13 | rdi = r13; 0x00446756 xor esi, esi | esi = 0; 0x00446758 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0044675b test eax, eax | | if (eax != 0) { 0x0044675d jne 0x4467b2 | goto label_3; | } | } 0x0044675f mov ebp, 2 | | } 0x00446764 mov ebx, ebp | ebx = 2; 0x00446766 jmp 0x446785 | | while (rcx != *((r13 + 0x38))) { 0x00446770 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00446774 mov qword [r13 + 0x30], rdx | *((r13 + 0x30)) = rdx; 0x00446778 mov byte [rcx], al | *(rcx) = al; | label_0: 0x0044677a dec rbx | rbx--; 0x0044677d lea eax, [rbx + 1] | eax = rbx + 1; 0x00446780 cmp eax, 1 | | if (eax <= 1) { 0x00446783 jle 0x4467af | goto label_4; | } 0x00446785 movzx eax, byte [rsp + rbx + 5] | eax = *((rsp + rbx + 5)); 0x0044678a mov rcx, qword [r13 + 0x30] | rcx = *((r13 + 0x30)); 0x0044678e cmp rcx, qword [r13 + 0x38] | 0x00446792 jne 0x446770 | | } 0x00446794 movzx ebp, al | ebp = (int32_t) al; 0x00446797 mov rax, qword [r13] | rax = *(r13); 0x0044679b mov rdi, r13 | rdi = r13; 0x0044679e mov esi, ebp | esi = ebp; 0x004467a0 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x004467a3 cmp eax, ebp | | if (eax == ebp) { 0x004467a5 je 0x44677a | goto label_0; | } 0x004467a7 mov r15d, 0xffffffff | r15d = 0xffffffff; 0x004467ad jmp 0x4467b2 | goto label_3; | label_4: 0x004467af xor r15d, r15d | r15d = 0; | label_3: 0x004467b2 mov eax, r15d | eax = r15d; 0x004467b5 add rsp, 8 | 0x004467b9 pop rbx | 0x004467ba pop r12 | 0x004467bc pop r13 | 0x004467be pop r14 | 0x004467c0 pop r15 | 0x004467c2 pop rbp | 0x004467c3 ret | return rax; | }