; assembly | /* r2dec pseudo code output */ | /* ball_attributecontainerlist.t/none @ 0x412550 */ | #include | ; (fcn) method.AttributeSet::AttributeComparator.operator___BloombergLP::ball::Attribute_const__BloombergLP::ball::Attribute_const__const () | uint64_t method_AttributeSet::AttributeComparator_operator_BloombergLP::ball::Attribute_const_BloombergLP::ball::Attribute_const_const (char ** s2, char * s1) { | rdx = s2; | rsi = s1; | /* AttributeSet::AttributeComparator::operator()(BloombergLP::ball::Attribute const&, BloombergLP::ball::Attribute const&) const */ 0x00412550 push rbp | 0x00412551 push r15 | 0x00412553 push r14 | 0x00412555 push rbx | 0x00412556 push rax | 0x00412557 mov r15, rdx | r15 = rdx; 0x0041255a mov r14, rsi | r14 = rsi; 0x0041255d mov rdi, qword [rsi] | 0x00412560 mov rsi, qword [rdx] | 0x00412563 call 0x403950 | eax = strcmp (*(rsi), *(rdx)); 0x00412568 test eax, eax | | if (eax != 0) { 0x0041256a je 0x412573 | 0x0041256c mov ebx, eax | ebx = eax; 0x0041256e shr ebx, 0x1f | ebx >>= 0x1f; 0x00412571 jmp 0x4125a8 | | } else { 0x00412573 mov eax, dword [r14 + 0x38] | eax = *((r14 + 0x38)); 0x00412577 cmp eax, dword [r15 + 0x38] | | if (eax == *((r15 + 0x38))) { 0x0041257b jne 0x4125a5 | 0x0041257d cmp eax, 3 | | if (eax <= 3) { 0x00412580 ja 0x41259b | 0x00412582 lea rdi, [r14 + 8] | rdi = r14 + 8; 0x00412586 lea rsi, [r15 + 8] | rsi = r15 + 8; 0x0041258a mov bl, 1 | bl = 1; 0x0041258c mov eax, eax | | /* switch table (4 cases) at 0x43e430 */ 0x0041258e jmp qword [rax*8 + 0x43e430] | 0x00412595 mov eax, dword [rdi] | eax = *(rdi); 0x00412597 cmp eax, dword [rsi] | 0x00412599 jmp 0x4125a5 | | } else { 0x0041259b xor ebx, ebx | ebx = 0; 0x0041259d jmp 0x4125a8 | goto label_0; 0x0041259f mov rax, qword [rdi] | rax = *(rdi); 0x004125a2 cmp rax, qword [rsi] | | } | } 0x004125a5 setl bl | bl = (rax < *(rsi)) ? 1 : 0; | } | do { | label_0: 0x004125a8 mov eax, ebx | eax = ebx; 0x004125aa add rsp, 8 | 0x004125ae pop rbx | 0x004125af pop r14 | 0x004125b1 pop r15 | 0x004125b3 pop rbp | 0x004125b4 ret | return rax; 0x004125b5 mov rax, qword [r14 + 0x20] | rax = *((r14 + 0x20)); 0x004125b9 mov rcx, qword [r15 + 0x20] | rcx = *((r15 + 0x20)); 0x004125bd cmp rax, rcx | 0x004125c0 setb bl | bl = (rax < rcx) ? 1 : 0; 0x004125c3 mov rdx, rcx | rdx = rcx; | if (rax < rcx) { 0x004125c6 cmovb rdx, rax | rdx = rax; | } 0x004125ca test rdx, rdx | 0x004125cd je 0x4125a8 | | } while (rdx == 0); 0x004125cf xor ebx, ebx | ebx = 0; 0x004125d1 cmp rax, rcx | 0x004125d4 setb bpl | bpl = (rax < rcx) ? 1 : 0; 0x004125d8 cmp qword [r15 + 0x28], 0x17 | | if (*((r15 + 0x28)) != 0x17) { 0x004125dd je 0x4125e3 | 0x004125df mov rsi, qword [r15 + 8] | rsi = *((r15 + 8)); | } 0x004125e3 cmp qword [r14 + 0x28], 0x17 | | if (*((r14 + 0x28)) != 0x17) { 0x004125e8 je 0x4125ee | 0x004125ea mov rdi, qword [r14 + 8] | | } 0x004125ee call 0x4039d0 | eax = memcmp (*((r14 + 8)), rsi, rdx); 0x004125f3 xor ecx, ecx | ecx = 0; 0x004125f5 test eax, eax | 0x004125f7 sets cl | __asm ("sets cl"); 0x004125fa mov bl, bpl | bl = bpl; | if (eax != 0) { 0x004125fd cmovne ebx, ecx | ebx = ecx; | } 0x00412600 jmp 0x4125a8 | goto label_0; | }