; assembly | /* r2dec pseudo code output */ | /* ball_attributecontext.t/none @ 0x411560 */ | #include | ; (fcn) method.AttributeComparator.operator___BloombergLP::ball::Attribute_const__BloombergLP::ball::Attribute_const__const () | uint64_t method_AttributeComparator_operator_BloombergLP::ball::Attribute_const_BloombergLP::ball::Attribute_const_const (char ** s2, char ** s1) { | rdx = s2; | rsi = s1; | /* AttributeComparator::operator()(BloombergLP::ball::Attribute const&, BloombergLP::ball::Attribute const&) const */ 0x00411560 push rbp | 0x00411561 push r15 | 0x00411563 push r14 | 0x00411565 push rbx | 0x00411566 push rax | 0x00411567 mov r15, rdx | r15 = rdx; 0x0041156a mov r14, rsi | r14 = rsi; 0x0041156d mov rdi, qword [rsi] | 0x00411570 mov rsi, qword [rdx] | 0x00411573 call 0x404470 | eax = strcmp (*(rsi), *(rdx)); 0x00411578 test eax, eax | | if (eax != 0) { 0x0041157a je 0x411583 | 0x0041157c mov ebx, eax | ebx = eax; 0x0041157e shr ebx, 0x1f | ebx >>= 0x1f; 0x00411581 jmp 0x4115b8 | | } else { 0x00411583 mov eax, dword [r14 + 0x38] | eax = *((r14 + 0x38)); 0x00411587 cmp eax, dword [r15 + 0x38] | | if (eax == *((r15 + 0x38))) { 0x0041158b jne 0x4115b5 | 0x0041158d cmp eax, 3 | | if (eax <= 3) { 0x00411590 ja 0x4115ab | 0x00411592 lea rdi, [r14 + 8] | rdi = r14 + 8; 0x00411596 lea rsi, [r15 + 8] | rsi = r15 + 8; 0x0041159a mov bl, 1 | bl = 1; 0x0041159c mov eax, eax | | /* switch table (4 cases) at 0x448c90 */ 0x0041159e jmp qword [rax*8 + 0x448c90] | 0x004115a5 mov eax, dword [rdi] | eax = *(rdi); 0x004115a7 cmp eax, dword [rsi] | 0x004115a9 jmp 0x4115b5 | | } else { 0x004115ab xor ebx, ebx | ebx = 0; 0x004115ad jmp 0x4115b8 | goto label_0; 0x004115af mov rax, qword [rdi] | rax = *(rdi); 0x004115b2 cmp rax, qword [rsi] | | } | } 0x004115b5 setl bl | bl = (rax < *(rsi)) ? 1 : 0; | } | do { | label_0: 0x004115b8 mov eax, ebx | eax = ebx; 0x004115ba add rsp, 8 | 0x004115be pop rbx | 0x004115bf pop r14 | 0x004115c1 pop r15 | 0x004115c3 pop rbp | 0x004115c4 ret | return rax; 0x004115c5 mov rax, qword [r14 + 0x20] | rax = *((r14 + 0x20)); 0x004115c9 mov rcx, qword [r15 + 0x20] | rcx = *((r15 + 0x20)); 0x004115cd cmp rax, rcx | 0x004115d0 setb bl | bl = (rax < rcx) ? 1 : 0; 0x004115d3 mov rdx, rcx | rdx = rcx; | if (rax < rcx) { 0x004115d6 cmovb rdx, rax | rdx = rax; | } 0x004115da test rdx, rdx | 0x004115dd je 0x4115b8 | | } while (rdx == 0); 0x004115df xor ebx, ebx | ebx = 0; 0x004115e1 cmp rax, rcx | 0x004115e4 setb bpl | bpl = (rax < rcx) ? 1 : 0; 0x004115e8 cmp qword [r15 + 0x28], 0x17 | | if (*((r15 + 0x28)) != 0x17) { 0x004115ed je 0x4115f3 | 0x004115ef mov rsi, qword [r15 + 8] | rsi = *((r15 + 8)); | } 0x004115f3 cmp qword [r14 + 0x28], 0x17 | | if (*((r14 + 0x28)) != 0x17) { 0x004115f8 je 0x4115fe | 0x004115fa mov rdi, qword [r14 + 8] | | } 0x004115fe call 0x404560 | eax = memcmp (*((r14 + 8)), rsi, rdx); 0x00411603 xor ecx, ecx | ecx = 0; 0x00411605 test eax, eax | 0x00411607 sets cl | __asm ("sets cl"); 0x0041160a mov bl, bpl | bl = bpl; | if (eax != 0) { 0x0041160d cmovne ebx, ecx | ebx = ecx; | } 0x00411610 jmp 0x4115b8 | goto label_0; | }