; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x44ded0 */ | #include | ; (fcn) method.int_BloombergLP::balber::BerUtil_IntegerImpUtil.putIntegerValue_long__std::__1::basic_streambuf_char__std::__1::char_traits_char_____long_ () | int64_t method_int_BloombergLP::balber::BerUtil_IntegerImpUtil_putIntegerValue_long_std::_1::basic_streambuf_char_std::_1::char_traits_char_long_ (int64_t arg2, int64_t arg1) { | int64_t var_7h; | int64_t var_8h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balber::BerUtil_IntegerImpUtil::putIntegerValue(std::__1::basic_streambuf >*, long) */ 0x0044ded0 push rbp | 0x0044ded1 push r15 | 0x0044ded3 push r14 | 0x0044ded5 push r12 | 0x0044ded7 push rbx | 0x0044ded8 sub rsp, 0x10 | 0x0044dedc mov r14, rsi | r14 = rsi; 0x0044dedf mov r12, rdi | r12 = rdi; 0x0044dee2 test rsi, rsi | | if (rsi == 0) { 0x0044dee5 je 0x44df21 | goto label_1; | } | if (rsi <= 0) { 0x0044dee7 jle 0x44df28 | goto label_2; | } 0x0044dee9 mov rax, r14 | rax = r14; 0x0044deec shr rax, 0x37 | rax >>= 0x37; 0x0044def0 mov ebp, 8 | | if (rax != 0) { 0x0044def5 jne 0x44df61 | goto label_3; | } 0x0044def7 mov ebp, 8 | 0x0044defc mov rcx, r14 | rcx = r14; 0x0044deff mov rax, r14 | rax = r14; 0x0044df02 nop word cs:[rax + rax] | 0x0044df0c nop dword [rax] | | do { 0x0044df10 shl rax, 8 | rax <<= 8; 0x0044df14 dec ebp | ebp--; 0x0044df16 shr rcx, 0x2f | rcx >>= 0x2f; 0x0044df1a mov rcx, rax | rcx = rax; 0x0044df1d je 0x44df10 | | } while (rcx == 0); 0x0044df1f jmp 0x44df61 | goto label_3; | label_1: 0x0044df21 mov ebp, 1 | 0x0044df26 jmp 0x44df61 | goto label_3; | label_2: 0x0044df28 movabs rax, 0xff80000000000000 | rax = 0xff80000000000000; 0x0044df32 mov rcx, r14 | rcx = r14; 0x0044df35 or rcx, rax | rcx |= rax; 0x0044df38 mov ebp, 8 | 0x0044df3d cmp rcx, r14 | | if (rcx != r14) { 0x0044df40 jne 0x44df61 | goto label_3; | } 0x0044df42 mov ebp, 8 | 0x0044df47 mov rcx, r14 | rcx = r14; 0x0044df4a nop word [rax + rax] | | do { 0x0044df50 shl rcx, 8 | rcx <<= 8; 0x0044df54 dec ebp | ebp--; 0x0044df56 mov rdx, rcx | rdx = rcx; 0x0044df59 or rdx, rax | rdx |= rax; 0x0044df5c cmp rdx, rcx | 0x0044df5f je 0x44df50 | | } while (rdx == rcx); | label_3: 0x0044df61 mov rax, qword [r12 + 0x30] | rax = *((r12 + 0x30)); 0x0044df66 cmp rax, qword [r12 + 0x38] | | if (rax != *((r12 + 0x38))) { 0x0044df6b je 0x44df7f | 0x0044df6d lea rcx, [rax + 1] | rcx = rax + 1; 0x0044df71 mov qword [r12 + 0x30], rcx | *((r12 + 0x30)) = rcx; 0x0044df76 mov byte [rax], bpl | *(rax) = bpl; 0x0044df79 movzx eax, bpl | eax = (int32_t) bpl; 0x0044df7d jmp 0x44df8d | | } else { 0x0044df7f movzx esi, bpl | esi = (int32_t) bpl; 0x0044df83 mov rax, qword [r12] | rax = *(r12); 0x0044df87 mov rdi, r12 | rdi = r12; 0x0044df8a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x0044df8d mov r15d, 0xffffffff | r15d = 0xffffffff; 0x0044df93 cmp ebp, eax | | if (ebp != eax) { 0x0044df95 jne 0x44dfef | goto label_4; | } 0x0044df97 mov qword [rsp + 8], r14 | *((rsp + 8)) = r14; 0x0044df9c mov r15d, 0xffffffff | r15d = 0xffffffff; 0x0044dfa2 cmp ebp, 8 | | if (ebp > 8) { 0x0044dfa5 ja 0x44dfef | goto label_4; | } 0x0044dfa7 mov ebx, ebp | ebx = ebp; 0x0044dfa9 jmp 0x44dfc6 | | while (rcx != *((r12 + 0x38))) { 0x0044dfb0 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x0044dfb4 mov qword [r12 + 0x30], rdx | *((r12 + 0x30)) = rdx; 0x0044dfb9 mov byte [rcx], al | *(rcx) = al; | label_0: 0x0044dfbb dec rbx | rbx--; 0x0044dfbe lea eax, [rbx + 1] | eax = rbx + 1; 0x0044dfc1 cmp eax, 1 | | if (eax <= 1) { 0x0044dfc4 jle 0x44dfec | goto label_5; | } 0x0044dfc6 movzx eax, byte [rsp + rbx + 7] | eax = *((rsp + rbx + 7)); 0x0044dfcb mov rcx, qword [r12 + 0x30] | rcx = *((r12 + 0x30)); 0x0044dfd0 cmp rcx, qword [r12 + 0x38] | 0x0044dfd5 jne 0x44dfb0 | | } 0x0044dfd7 movzx ebp, al | ebp = (int32_t) al; 0x0044dfda mov rax, qword [r12] | rax = *(r12); 0x0044dfde mov rdi, r12 | rdi = r12; 0x0044dfe1 mov esi, ebp | esi = ebp; 0x0044dfe3 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0044dfe6 cmp eax, ebp | | if (eax == ebp) { 0x0044dfe8 je 0x44dfbb | goto label_0; | } 0x0044dfea jmp 0x44dfef | goto label_4; | label_5: 0x0044dfec xor r15d, r15d | r15d = 0; | label_4: 0x0044dfef mov eax, r15d | eax = r15d; 0x0044dff2 add rsp, 0x10 | 0x0044dff6 pop rbx | 0x0044dff7 pop r12 | 0x0044dff9 pop r14 | 0x0044dffb pop r15 | 0x0044dffd pop rbp | 0x0044dffe ret | return rax; | }