; assembly | /* r2dec pseudo code output */ | /* balb_controlmanager.t/assume @ 0x4105a0 */ | #include | ; (fcn) method.BloombergLP::bslstl::Function_Rep.moveInit_BloombergLP::bslstl::Function_Rep_ () | int64_t method_BloombergLP::bslstl::Function_Rep_moveInit_BloombergLP::bslstl::Function_Rep_ (uint32_t arg2, int64_t arg1) { | rsi = arg2; | rdi = arg1; | /* BloombergLP::bslstl::Function_Rep::moveInit(BloombergLP::bslstl::Function_Rep*) */ 0x004105a0 push r15 | 0x004105a2 push r14 | 0x004105a4 push rbx | 0x004105a5 cmp qword [rsi + 0x40], 0 | | if (*((rsi + 0x40)) != 0) { 0x004105aa je 0x41067d | 0x004105b0 mov rbx, rsi | rbx = rsi; 0x004105b3 mov r14, rdi | r14 = rdi; 0x004105b6 mov rcx, qword [rdi + 0x30] | rcx = *((rdi + 0x30)); 0x004105ba mov rax, qword [rsi + 0x38] | rax = *((rsi + 0x38)); 0x004105be cmp rcx, qword [rsi + 0x30] | | if (rcx != *((rsi + 0x30))) { 0x004105c2 je 0x4105da | 0x004105c4 test rax, rax | | if (rax != 0) { 0x004105c7 je 0x4105fc | 0x004105c9 mov edi, 4 | edi = 4; 0x004105ce mov rsi, rbx | rsi = rbx; 0x004105d1 xor edx, edx | edx = 0; 0x004105d3 call rax | rax = void (*rax)() (); 0x004105d5 mov r15, rax | r15 = rax; 0x004105d8 jmp 0x4105ff | | } else { 0x004105da mov edi, 4 | edi = 4; 0x004105df mov rsi, rbx | rsi = rbx; 0x004105e2 xor edx, edx | edx = 0; 0x004105e4 call rax | rax = void (*rax)() (); 0x004105e6 cmp rax, 0x30 | | if (rax > 0x30) { 0x004105ea ja 0x410650 | goto label_0; | } 0x004105ec mov edi, 3 | edi = 3; 0x004105f1 mov rsi, r14 | rsi = r14; 0x004105f4 mov rdx, rbx | rdx = rbx; 0x004105f7 call qword [rbx + 0x38] | uint64_t (*rbx + 0x38)() (); 0x004105fa jmp 0x41065d | goto label_1; | } 0x004105fc xor r15d, r15d | r15d = 0; | } 0x004105ff cmp qword [r14 + 0x38], 0 | 0x00410604 cmp r15, 0x31 | | if (r15 >= 0x31) { 0x00410608 jb 0x410623 | 0x0041060a lea rsi, [r15 + 0x31] | rsi = r15 + 0x31; 0x0041060e cmp r15, 0xffffffffffffffcf | | if (r15 <= 0xffffffffffffffcf) { 0x00410612 cmovbe rsi, r15 | rsi = r15; | } 0x00410616 mov rdi, qword [r14 + 0x30] | rdi = *((r14 + 0x30)); 0x0041061a mov rax, qword [rdi] | rax = *(rdi); 0x0041061d call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00410620 mov qword [r14], rax | *(r14) = rax; | } 0x00410623 mov rax, qword [rbx + 0x38] | rax = *((rbx + 0x38)); 0x00410627 mov qword [r14 + 0x38], rax | *((r14 + 0x38)) = rax; 0x0041062b test rax, rax | | if (rax == 0) { 0x0041062e je 0x41067d | goto label_2; | } 0x00410630 mov rdx, rbx | rdx = rbx; 0x00410633 cmp r15, 0x31 | | if (r15 >= 0x31) { 0x00410637 jb 0x41063c | 0x00410639 mov rdx, qword [rbx] | rdx = *(rbx); | } 0x0041063c mov edi, 1 | edi = 1; 0x00410641 mov rsi, r14 | rsi = r14; 0x00410644 call rax | void (*rax)() (); 0x00410646 mov rax, qword [rbx + 0x40] | rax = *((rbx + 0x40)); 0x0041064a mov qword [r14 + 0x40], rax | *((r14 + 0x40)) = rax; 0x0041064e jmp 0x41067d | goto label_2; | label_0: 0x00410650 mov rax, qword [rbx] | rax = *(rbx); 0x00410653 mov qword [r14], rax | *(r14) = rax; 0x00410656 mov qword [rbx], 0 | *(rbx) = 0; | label_1: 0x0041065d mov rax, qword [rbx + 0x38] | rax = *((rbx + 0x38)); 0x00410661 mov qword [r14 + 0x38], rax | *((r14 + 0x38)) = rax; 0x00410665 mov qword [rbx + 0x38], 0 | *((rbx + 0x38)) = 0; 0x0041066d mov rax, qword [rbx + 0x40] | rax = *((rbx + 0x40)); 0x00410671 mov qword [r14 + 0x40], rax | *((r14 + 0x40)) = rax; 0x00410675 mov qword [rbx + 0x40], 0 | *((rbx + 0x40)) = 0; | } | label_2: 0x0041067d pop rbx | 0x0041067e pop r14 | 0x00410680 pop r15 | 0x00410682 ret | return rax; | }