; assembly | /* r2dec pseudo code output */ | /* ball_attributecontainerlist.t/assume @ 0x413700 */ | #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 */ 0x00413700 push rbp | 0x00413701 push r15 | 0x00413703 push r14 | 0x00413705 push rbx | 0x00413706 push rax | 0x00413707 mov r15, rdx | r15 = rdx; 0x0041370a mov r14, rsi | r14 = rsi; 0x0041370d mov rdi, qword [rsi] | 0x00413710 mov rsi, qword [rdx] | 0x00413713 call 0x403950 | eax = strcmp (*(rsi), *(rdx)); 0x00413718 test eax, eax | | if (eax != 0) { 0x0041371a je 0x413723 | 0x0041371c mov ebx, eax | ebx = eax; 0x0041371e shr ebx, 0x1f | ebx >>= 0x1f; 0x00413721 jmp 0x41374f | | } else { 0x00413723 mov eax, dword [r14 + 0x38] | eax = *((r14 + 0x38)); 0x00413727 cmp eax, dword [r15 + 0x38] | | if (eax == *((r15 + 0x38))) { 0x0041372b jne 0x41374c | 0x0041372d lea rdi, [r14 + 8] | rdi = r14 + 8; 0x00413731 lea rsi, [r15 + 8] | rsi = r15 + 8; 0x00413735 mov bl, 1 | bl = 1; 0x00413737 mov eax, eax | | /* switch table (5 cases) at 0x43f090 */ 0x00413739 jmp qword [rax*8 + 0x43f090] | 0x00413740 mov eax, dword [rdi] | eax = *(rdi); 0x00413742 cmp eax, dword [rsi] | 0x00413744 jmp 0x41374c | goto label_1; 0x00413746 mov rax, qword [rdi] | rax = *(rdi); 0x00413749 cmp rax, qword [rsi] | | } | label_1: 0x0041374c setl bl | bl = (rax < *(rsi)) ? 1 : 0; | } | do { | label_0: 0x0041374f mov eax, ebx | eax = ebx; 0x00413751 add rsp, 8 | 0x00413755 pop rbx | 0x00413756 pop r14 | 0x00413758 pop r15 | 0x0041375a pop rbp | 0x0041375b ret | return rax; 0x0041375c mov rax, qword [r14 + 0x20] | rax = *((r14 + 0x20)); 0x00413760 mov rcx, qword [r15 + 0x20] | rcx = *((r15 + 0x20)); 0x00413764 cmp rax, rcx | 0x00413767 setb bl | bl = (rax < rcx) ? 1 : 0; 0x0041376a mov rdx, rcx | rdx = rcx; | if (rax < rcx) { 0x0041376d cmovb rdx, rax | rdx = rax; | } 0x00413771 test rdx, rdx | 0x00413774 je 0x41374f | | } while (rdx == 0); 0x00413776 xor ebx, ebx | ebx = 0; 0x00413778 cmp rax, rcx | 0x0041377b setb bpl | bpl = (rax < rcx) ? 1 : 0; 0x0041377f cmp qword [r15 + 0x28], 0x17 | | if (*((r15 + 0x28)) != 0x17) { 0x00413784 je 0x41378a | 0x00413786 mov rsi, qword [r15 + 8] | rsi = *((r15 + 8)); | } 0x0041378a cmp qword [r14 + 0x28], 0x17 | | if (*((r14 + 0x28)) != 0x17) { 0x0041378f je 0x413795 | 0x00413791 mov rdi, qword [r14 + 8] | | } 0x00413795 call 0x4039d0 | eax = memcmp (*((r14 + 8)), rsi, rdx); 0x0041379a xor ecx, ecx | ecx = 0; 0x0041379c test eax, eax | 0x0041379e sets cl | __asm ("sets cl"); 0x004137a1 mov bl, bpl | bl = bpl; | if (eax != 0) { 0x004137a4 cmovne ebx, ecx | ebx = ecx; | } 0x004137a7 jmp 0x41374f | goto label_0; 0x004137bf add rsp, 8 | 0x004137c3 pop rbx | 0x004137c4 pop r14 | 0x004137c6 ret | return rax; | }