; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x454ac0 */ | #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) */ 0x00454ac0 push rbp | 0x00454ac1 push r15 | 0x00454ac3 push r14 | 0x00454ac5 push rbx | 0x00454ac6 sub rsp, 0x18 | 0x00454aca mov r14d, edx | r14d = edx; 0x00454acd mov rbx, rdi | rbx = rdi; 0x00454ad0 mov ebp, edx | 0x00454ad2 shr ebp, 4 | ebp >>= 4; 0x00454ad5 mov edx, edx | 0x00454ad7 mov rdi, rsp | 0x00454ada call 0x4041f0 | memset (rsp, rsi, edx); 0x00454adf test ebp, ebp | | if (ebp == 0) { 0x00454ae1 je 0x454b0b | goto label_0; | } 0x00454ae3 mov r15, rsp | r15 = rsp; 0x00454ae6 nop word cs:[rax + rax] | | do { 0x00454af0 mov rax, qword [rbx] | rax = *(rbx); 0x00454af3 mov edx, 0x10 | edx = 0x10; 0x00454af8 mov rdi, rbx | rdi = rbx; 0x00454afb mov rsi, r15 | rsi = r15; 0x00454afe call qword [rax + 0x60] | rax = uint64_t (*rax + 0x60)() (); 0x00454b01 cmp rax, 0x10 | | if (rax != 0x10) { 0x00454b05 jne 0x454b30 | goto label_1; | } 0x00454b07 dec ebp | ebp--; 0x00454b09 jne 0x454af0 | | } while (ebp != 0); | label_0: 0x00454b0b and r14d, 0xf | r14d &= 0xf; 0x00454b0f mov ebp, r14d | 0x00454b12 mov rax, qword [rbx] | rax = *(rbx); 0x00454b15 mov rsi, rsp | rsi = rsp; 0x00454b18 mov rdi, rbx | rdi = rbx; 0x00454b1b mov rdx, rbp | rdx = rbp; 0x00454b1e call qword [rax + 0x60] | rax = uint64_t (*rax + 0x60)() (); 0x00454b21 mov rcx, rax | rcx = rax; 0x00454b24 xor eax, eax | eax = 0; 0x00454b26 cmp rcx, rbp | 0x00454b29 setne al | al = (rcx != rbp) ? 1 : 0; 0x00454b2c neg eax | eax = -eax; 0x00454b2e jmp 0x454b35 | goto label_2; | label_1: 0x00454b30 mov eax, 0xffffffff | eax = 0xffffffff; | label_2: 0x00454b35 add rsp, 0x18 | 0x00454b39 pop rbx | 0x00454b3a pop r14 | 0x00454b3c pop r15 | 0x00454b3e pop rbp | 0x00454b3f ret | return rax; | }