; assembly | /* r2dec pseudo code output */ | /* balb_controlmanager.t/none @ 0x410530 */ | #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*) */ 0x00410530 push r15 | 0x00410532 push r14 | 0x00410534 push rbx | 0x00410535 cmp qword [rsi + 0x40], 0 | | if (*((rsi + 0x40)) != 0) { 0x0041053a je 0x41060d | 0x00410540 mov rbx, rsi | rbx = rsi; 0x00410543 mov r14, rdi | r14 = rdi; 0x00410546 mov rcx, qword [rdi + 0x30] | rcx = *((rdi + 0x30)); 0x0041054a mov rax, qword [rsi + 0x38] | rax = *((rsi + 0x38)); 0x0041054e cmp rcx, qword [rsi + 0x30] | | if (rcx != *((rsi + 0x30))) { 0x00410552 je 0x4105b4 | 0x00410554 test rax, rax | | if (rax != 0) { 0x00410557 je 0x4105d6 | 0x00410559 mov edi, 4 | edi = 4; 0x0041055e mov rsi, rbx | rsi = rbx; 0x00410561 xor edx, edx | edx = 0; 0x00410563 call rax | rax = void (*rax)() (); 0x00410565 mov r15, rax | r15 = rax; 0x00410568 cmp rax, 0x31 | | if (rax >= 0x31) { 0x0041056c jb 0x410587 | 0x0041056e lea rsi, [r15 + 0x31] | rsi = r15 + 0x31; 0x00410572 cmp r15, 0xffffffffffffffcf | | if (r15 <= 0xffffffffffffffcf) { 0x00410576 cmovbe rsi, r15 | rsi = r15; | } 0x0041057a mov rdi, qword [r14 + 0x30] | rdi = *((r14 + 0x30)); 0x0041057e mov rax, qword [rdi] | rax = *(rdi); 0x00410581 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00410584 mov qword [r14], rax | *(r14) = rax; | } 0x00410587 mov rax, qword [rbx + 0x38] | rax = *((rbx + 0x38)); 0x0041058b mov qword [r14 + 0x38], rax | *((r14 + 0x38)) = rax; 0x0041058f test rax, rax | | if (rax == 0) { 0x00410592 je 0x41060d | goto label_0; | } 0x00410594 mov rdx, rbx | rdx = rbx; 0x00410597 cmp r15, 0x31 | | if (r15 >= 0x31) { 0x0041059b jb 0x4105a0 | 0x0041059d mov rdx, qword [rbx] | rdx = *(rbx); | } 0x004105a0 mov edi, 1 | edi = 1; 0x004105a5 mov rsi, r14 | rsi = r14; 0x004105a8 call rax | void (*rax)() (); 0x004105aa mov rax, qword [rbx + 0x40] | rax = *((rbx + 0x40)); 0x004105ae mov qword [r14 + 0x40], rax | *((r14 + 0x40)) = rax; 0x004105b2 jmp 0x41060d | 0x004105b4 mov edi, 4 | edi = 4; 0x004105b9 mov rsi, rbx | rsi = rbx; 0x004105bc xor edx, edx | edx = 0; 0x004105be call rax | rax = void (*rax)() (); 0x004105c0 cmp rax, 0x30 | | } else { | } else { | if (rax <= 0x30) { 0x004105c4 ja 0x4105e0 | 0x004105c6 mov edi, 3 | edi = 3; 0x004105cb mov rsi, r14 | rsi = r14; 0x004105ce mov rdx, rbx | rdx = rbx; 0x004105d1 call qword [rbx + 0x38] | uint64_t (*rbx + 0x38)() (); 0x004105d4 jmp 0x4105ed | 0x004105d6 mov qword [r14 + 0x38], 0 | *((r14 + 0x38)) = 0; 0x004105de jmp 0x41060d | goto label_0; | } 0x004105e0 mov rax, qword [rbx] | rax = *(rbx); 0x004105e3 mov qword [r14], rax | *(r14) = rax; 0x004105e6 mov qword [rbx], 0 | *(rbx) = 0; | } 0x004105ed mov rax, qword [rbx + 0x38] | rax = *((rbx + 0x38)); 0x004105f1 mov qword [r14 + 0x38], rax | *((r14 + 0x38)) = rax; 0x004105f5 mov qword [rbx + 0x38], 0 | *((rbx + 0x38)) = 0; 0x004105fd mov rax, qword [rbx + 0x40] | rax = *((rbx + 0x40)); 0x00410601 mov qword [r14 + 0x40], rax | *((r14 + 0x40)) = rax; 0x00410605 mov qword [rbx + 0x40], 0 | *((rbx + 0x40)) = 0; | } | } | label_0: 0x0041060d pop rbx | 0x0041060e pop r14 | 0x00410610 pop r15 | 0x00410612 ret | return rax; | }