; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/none @ 0x454a70 */ | #include | ; (fcn) method.BloombergLP::balber::BerUtil_StringImpUtil.putChars_std::__1::basic_streambuf_char__std::__1::char_traits_char_____char__int_ () | int64_t method_BloombergLP::balber::BerUtil_StringImpUtil_putChars_std::_1::basic_streambuf_char_std::_1::char_traits_char_char_int_ (size_t n, int32_t c, int64_t arg1) { | rdx = n; | rsi = c; | rdi = arg1; | /* BloombergLP::balber::BerUtil_StringImpUtil::putChars(std::__1::basic_streambuf >*, char, int) */ 0x00454a70 push rbp | 0x00454a71 push r15 | 0x00454a73 push r14 | 0x00454a75 push r12 | 0x00454a77 push rbx | 0x00454a78 sub rsp, 0x10 | 0x00454a7c mov r14d, edx | r14d = edx; 0x00454a7f mov rbx, rdi | rbx = rdi; 0x00454a82 lea ebp, [r14 + 0xf] | ebp = r14 + 0xf; 0x00454a86 test edx, edx | 0x00454a88 mov r12d, edx | r12d = edx; 0x00454a8b cmovs r12d, ebp | __asm ("cmovs r12d, ebp"); 0x00454a8f movsxd rdx, edx | rdx = (int64_t) edx; 0x00454a92 mov rdi, rsp | 0x00454a95 call 0x4041f0 | memset (rsp, rsi, rdx); 0x00454a9a cmp ebp, 0x1f | | if (ebp < 0x1f) { 0x00454a9d jb 0x454acb | goto label_0; | } 0x00454a9f mov ebp, r12d | 0x00454aa2 sar ebp, 4 | ebp >>= 4; 0x00454aa5 mov r15, rsp | r15 = rsp; 0x00454aa8 nop dword [rax + rax] | | do { 0x00454ab0 mov rax, qword [rbx] | rax = *(rbx); 0x00454ab3 mov edx, 0x10 | edx = 0x10; 0x00454ab8 mov rdi, rbx | rdi = rbx; 0x00454abb mov rsi, r15 | rsi = r15; 0x00454abe call qword [rax + 0x60] | rax = uint64_t (*rax + 0x60)() (); 0x00454ac1 cmp rax, 0x10 | | if (rax != 0x10) { 0x00454ac5 jne 0x454af3 | goto label_1; | } 0x00454ac7 dec ebp | ebp--; 0x00454ac9 jne 0x454ab0 | | } while (ebp != 0); | label_0: 0x00454acb and r12d, 0xfffffff0 | r12d &= 0xfffffff0; 0x00454acf sub r14d, r12d | r14d -= r12d; 0x00454ad2 movsxd r14, r14d | r14 = (int64_t) r14d; 0x00454ad5 mov rax, qword [rbx] | rax = *(rbx); 0x00454ad8 mov rsi, rsp | rsi = rsp; 0x00454adb mov rdi, rbx | rdi = rbx; 0x00454ade mov rdx, r14 | rdx = r14; 0x00454ae1 call qword [rax + 0x60] | rax = uint64_t (*rax + 0x60)() (); 0x00454ae4 mov rcx, rax | rcx = rax; 0x00454ae7 xor eax, eax | eax = 0; 0x00454ae9 cmp rcx, r14 | 0x00454aec setne al | al = (rcx != r14) ? 1 : 0; 0x00454aef neg eax | eax = -eax; 0x00454af1 jmp 0x454af8 | goto label_2; | label_1: 0x00454af3 mov eax, 0xffffffff | eax = 0xffffffff; | label_2: 0x00454af8 add rsp, 0x10 | 0x00454afc pop rbx | 0x00454afd pop r12 | 0x00454aff pop r14 | 0x00454b01 pop r15 | 0x00454b03 pop rbp | 0x00454b04 ret | return rax; | }