; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x446740 */ | #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_dh; | int64_t var_eh; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balber::BerUtil_IntegerImpUtil::putIntegerValue(std::__1::basic_streambuf >*, unsigned short) */ 0x00446740 push rbp | 0x00446741 push r15 | 0x00446743 push r14 | 0x00446745 push r12 | 0x00446747 push rbx | 0x00446748 sub rsp, 0x10 | 0x0044674c mov r14d, esi | r14d = esi; 0x0044674f mov r12, rdi | r12 = rdi; 0x00446752 test r14w, r14w | | if (r14w != 0) { 0x00446756 je 0x44676d | | if (r14w >= 0) { 0x00446758 js 0x446774 | 0x0044675a movzx eax, r14w | eax = (int32_t) r14w; 0x0044675e cmp eax, 0x80 | 0x00446763 mov ebp, 2 | 0x00446768 sbb ebp, 0 | 0x0044676b jmp 0x446779 | | } else { 0x0044676d mov ebp, 1 | 0x00446772 jmp 0x446779 | | } else { 0x00446774 mov ebp, 3 | | } | } 0x00446779 mov rax, qword [r12 + 0x30] | rax = *((r12 + 0x30)); 0x0044677e cmp rax, qword [r12 + 0x38] | | if (rax != *((r12 + 0x38))) { 0x00446783 je 0x446795 | 0x00446785 lea rcx, [rax + 1] | rcx = rax + 1; 0x00446789 mov qword [r12 + 0x30], rcx | *((r12 + 0x30)) = rcx; 0x0044678e mov byte [rax], bpl | *(rax) = bpl; 0x00446791 mov eax, ebp | eax = ebp; 0x00446793 jmp 0x4467a1 | | } else { 0x00446795 mov rax, qword [r12] | rax = *(r12); 0x00446799 mov rdi, r12 | rdi = r12; 0x0044679c mov esi, ebp | esi = ebp; 0x0044679e call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x004467a1 mov r15d, 0xffffffff | r15d = 0xffffffff; 0x004467a7 cmp ebp, eax | | if (ebp != eax) { 0x004467a9 jne 0x446845 | goto label_1; | } 0x004467af mov word [rsp + 0xe], r14w | *((rsp + 0xe)) = r14w; 0x004467b5 cmp ebp, 3 | | if (ebp == 3) { 0x004467b8 jne 0x4467f9 | 0x004467ba mov r15d, 0xffffffff | r15d = 0xffffffff; 0x004467c0 test r14w, r14w | | if (r14w >= 0) { 0x004467c4 jns 0x446845 | goto label_1; | } 0x004467ca mov rax, qword [r12 + 0x30] | rax = *((r12 + 0x30)); 0x004467cf cmp rax, qword [r12 + 0x38] | | if (rax != *((r12 + 0x38))) { 0x004467d4 je 0x4467e4 | 0x004467d6 lea rcx, [rax + 1] | rcx = rax + 1; 0x004467da mov qword [r12 + 0x30], rcx | *((r12 + 0x30)) = rcx; 0x004467df mov byte [rax], 0 | *(rax) = 0; 0x004467e2 jmp 0x4467f4 | | } else { 0x004467e4 mov rax, qword [r12] | rax = *(r12); 0x004467e8 mov rdi, r12 | rdi = r12; 0x004467eb xor esi, esi | esi = 0; 0x004467ed call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x004467f0 test eax, eax | | if (eax != 0) { 0x004467f2 jne 0x446845 | goto label_1; | } | } 0x004467f4 mov ebp, 2 | | } 0x004467f9 mov ebx, ebp | ebx = 2; 0x004467fb jmp 0x446816 | | while (rcx != *((r12 + 0x38))) { 0x00446800 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00446804 mov qword [r12 + 0x30], rdx | *((r12 + 0x30)) = rdx; 0x00446809 mov byte [rcx], al | *(rcx) = al; | label_0: 0x0044680b dec rbx | rbx--; 0x0044680e lea eax, [rbx + 1] | eax = rbx + 1; 0x00446811 cmp eax, 1 | | if (eax <= 1) { 0x00446814 jle 0x446842 | goto label_2; | } 0x00446816 movzx eax, byte [rsp + rbx + 0xd] | eax = *((rsp + rbx + 0xd)); 0x0044681b mov rcx, qword [r12 + 0x30] | rcx = *((r12 + 0x30)); 0x00446820 cmp rcx, qword [r12 + 0x38] | 0x00446825 jne 0x446800 | | } 0x00446827 movzx ebp, al | ebp = (int32_t) al; 0x0044682a mov rax, qword [r12] | rax = *(r12); 0x0044682e mov rdi, r12 | rdi = r12; 0x00446831 mov esi, ebp | esi = ebp; 0x00446833 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00446836 cmp eax, ebp | | if (eax == ebp) { 0x00446838 je 0x44680b | goto label_0; | } 0x0044683a mov r15d, 0xffffffff | r15d = 0xffffffff; 0x00446840 jmp 0x446845 | goto label_1; | label_2: 0x00446842 xor r15d, r15d | r15d = 0; | label_1: 0x00446845 mov eax, r15d | eax = r15d; 0x00446848 add rsp, 0x10 | 0x0044684c pop rbx | 0x0044684d pop r12 | 0x0044684f pop r14 | 0x00446851 pop r15 | 0x00446853 pop rbp | 0x00446854 ret | return rax; | }