; assembly | /* r2dec pseudo code output */ | /* balcl_commandline.t/assume @ 0x45d460 */ | #include | ; (fcn) method.BloombergLP::balcl::CommandLine.theBool_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char____const__const () | int64_t method_BloombergLP::balcl::CommandLine_theBool_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_const_const (int64_t arg2, uint32_t arg1) { | rsi = arg2; | rdi = arg1; | /* BloombergLP::balcl::CommandLine::theBool(bsl::basic_string, bsl::allocator > const&) const */ 0x0045d460 push rbp | 0x0045d461 push r15 | 0x0045d463 push r14 | 0x0045d465 push r13 | 0x0045d467 push r12 | 0x0045d469 push rbx | 0x0045d46a push rax | 0x0045d46b mov r15, rsi | r15 = rsi; 0x0045d46e mov r14, rdi | r14 = rdi; 0x0045d471 mov rax, qword [rdi] | rax = *(rdi); 0x0045d474 cmp qword [rdi + 8], rax | | if (*((rdi + 8)) == rax) { 0x0045d478 je 0x45d4ec | goto label_1; | } 0x0045d47a xor ebx, ebx | ebx = 0; 0x0045d47c movabs r12, 0xaf8af8af8af8af8b | r12 = 0xaf8af8af8af8af8b; 0x0045d486 jmp 0x45d4b5 | goto label_2; | label_0: 0x0045d490 mov rdi, rax | rdi = rax; 0x0045d493 call 0x404840 | eax = bcmp (); 0x0045d498 test eax, eax | | if (eax == 0) { 0x0045d49a je 0x45d4ec | goto label_1; | } | do { 0x0045d49c inc ebx | ebx++; 0x0045d49e mov rax, qword [r14] | rax = *(r14); 0x0045d4a1 mov rcx, qword [r14 + 8] | rcx = *((r14 + 8)); 0x0045d4a5 sub rcx, rax | rcx -= rax; 0x0045d4a8 sar rcx, 3 | rcx >>= 3; 0x0045d4ac imul rcx, r12 | rcx *= r12; 0x0045d4b0 cmp rcx, rbx | | if (rcx <= rbx) { 0x0045d4b3 jbe 0x45d4ec | goto label_1; | } | label_2: 0x0045d4b5 imul rdi, rbx, 0x118 | rdi = rbx * 0x118; 0x0045d4bc add rdi, rax | rdi += rax; 0x0045d4bf call 0x464fb0 | rax = BloombergLP::balcl::Option::name()const (rdi); 0x0045d4c4 mov rdx, qword [rax + 0x18] | rdx = *((rax + 0x18)); 0x0045d4c8 cmp rdx, qword [r15 + 0x18] | 0x0045d4cc jne 0x45d49c | | } while (rdx != *((r15 + 0x18))); 0x0045d4ce test rdx, rdx | | if (rdx == 0) { 0x0045d4d1 je 0x45d4ec | goto label_1; | } 0x0045d4d3 cmp qword [r15 + 0x20], 0x17 | 0x0045d4d8 mov rsi, r15 | rsi = r15; | if (*((r15 + 0x20)) != 0x17) { 0x0045d4db je 0x45d4e0 | 0x0045d4dd mov rsi, qword [r15] | rsi = *(r15); | } 0x0045d4e0 cmp qword [rax + 0x20], 0x17 | | if (*((rax + 0x20)) == 0x17) { 0x0045d4e5 je 0x45d490 | goto label_0; | } 0x0045d4e7 mov rax, qword [rax] | rax = *(rax); 0x0045d4ea jmp 0x45d490 | goto label_0; | label_1: 0x0045d4ec cmp qword [r15 + 0x20], 0x17 | | if (*((r15 + 0x20)) != 0x17) { 0x0045d4f1 je 0x45d4f6 | 0x0045d4f3 mov r15, qword [r15] | r15 = *(r15); | } 0x0045d4f6 mov r13, qword [r14 + 0x88] | r13 = *((r14 + 0x88)); 0x0045d4fd mov rbx, qword [r14 + 0x90] | rbx = *((r14 + 0x90)); 0x0045d504 mov r12, 0xffffffffffffffff | r12 = 0xffffffffffffffff; 0x0045d50b sub rbx, r13 | rbx -= r13; | if (rbx == 0) { 0x0045d50e je 0x45d543 | goto label_3; | } 0x0045d510 xor ebp, ebp | ebp = 0; 0x0045d512 nop word cs:[rax + rax] | 0x0045d51c nop dword [rax] | | do { 0x0045d520 mov rdi, qword [r13 + rbp + 8] | 0x0045d525 mov rsi, r15 | 0x0045d528 call 0x4049e0 | eax = strcmp (*((r13 + rbp + 8)), r15); 0x0045d52d test eax, eax | | if (eax == 0) { 0x0045d52f je 0x45d53c | goto label_4; | } 0x0045d531 add rbp, 0x10 | rbp += 0x10; 0x0045d535 cmp rbx, rbp | 0x0045d538 jne 0x45d520 | | } while (rbx != rbp); 0x0045d53a jmp 0x45d543 | goto label_3; | label_4: 0x0045d53c sar rbp, 4 | rbp >>= 4; 0x0045d540 mov r12, rbp | r12 = rbp; | label_3: 0x0045d543 mov rax, qword [r14 + 0xc8] | rax = *((r14 + 0xc8)); 0x0045d54a lea rcx, [r12 + r12*4] | rcx = r12 * 5; 0x0045d54e shl rcx, 4 | rcx <<= 4; 0x0045d552 mov al, byte [rax + rcx] | al = *((rax + rcx)); 0x0045d555 add rsp, 8 | 0x0045d559 pop rbx | 0x0045d55a pop r12 | 0x0045d55c pop r13 | 0x0045d55e pop r14 | 0x0045d560 pop r15 | 0x0045d562 pop rbp | 0x0045d563 ret | return rax; | }