; assembly | /* r2dec pseudo code output */ | /* balcl_optionvalue.t/none @ 0x42d520 */ | #include | ; (fcn) sym._anonymous_namespace_::u::checkPrint_BloombergLP::balcl::OptionValue_const_ () | uint64_t anonymous_namespace_::u::checkPrint_BloombergLP::balcl::OptionValue_const_ (int64_t arg1) { | uint32_t var_18h; | uint32_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | int64_t var_80h; | int64_t var_98h; | uint32_t var_a0h; | int64_t var_a8h; | int64_t var_c0h; | int64_t var_148h; | int64_t var_150h; | rdi = arg1; | /* (anonymous namespace)::u::checkPrint(BloombergLP::balcl::OptionValue const&) */ 0x0042d520 push rbp | 0x0042d521 push r15 | 0x0042d523 push r14 | 0x0042d525 push r13 | 0x0042d527 push r12 | 0x0042d529 push rbx | 0x0042d52a sub rsp, 0x158 | 0x0042d531 mov r14, rdi | r14 = rdi; 0x0042d534 call 0x4a0260 | eax = BloombergLP::balcl::OptionValue::type()const (rdi); 0x0042d539 mov r13d, eax | r13d = eax; 0x0042d53c mov rax, qword [rip + 0x2f44dd] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0042d543 test rax, rax | | if (rax == 0) { 0x0042d546 jne 0x42d54d | 0x0042d548 call 0x4a64f0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x0042d54d mov qword [rsp], rax | *(rsp) = rax; 0x0042d551 mov qword [rsp + 0xc0], 0x71ecb8 | *((rsp + 0xc0)) = 0x71ecb8; 0x0042d55d lea rbx, [rsp + 0x40] | rbx = rsp + 0x40; 0x0042d562 mov rdx, rsp | 0x0042d565 mov rdi, rbx | 0x0042d568 mov esi, 0x10 | 0x0042d56d call 0x49f890 | bsl::basic_stringbuf,bsl::allocator>::basic_stringbuf(unsignedint,bsl::allocatorconst&) (rbx, 0x10, rsp); 0x0042d572 mov qword [rsp + 0x38], 0x4dfbb8 | *((rsp + 0x38)) = sym.imp.std::__1::basic_ostream_char__std::__1::char_traits_char___::basic_ostream__; 0x0042d57b lea rdi, [rsp + 0xc0] | rdi = rsp + 0xc0; 0x0042d583 mov qword [rsp + 0xc0], 0x4dfbe0 | *((rsp + 0xc0)) = fcn.00403910; 0x0042d58f mov rsi, rbx | rsi = rbx; 0x0042d592 call 0x403b20 | std::_1::ios_base::init(void*) (); 0x0042d597 mov qword [rsp + 0x148], 0 | *((rsp + 0x148)) = 0; 0x0042d5a3 mov dword [rsp + 0x150], 0xffffffff | *((rsp + 0x150)) = 0xffffffff; 0x0042d5ae mov qword [rsp + 0x38], 0x4dfb48 | *((rsp + 0x38)) = vtable.bsl::basic_ostringstream_char__std::__1::char_traits_char___bsl::allocator_char___.0; 0x0042d5b7 mov qword [rsp + 0xc0], 0x4dfb70 | *((rsp + 0xc0)) = vtable.bsl::basic_ostringstream_char__std::__1::char_traits_char___bsl::allocator_char___.1; 0x0042d5c3 lea rbp, [rsp + 0x38] | rbp = rsp + 0x38; 0x0042d5c8 mov rdi, r14 | 0x0042d5cb mov rsi, rbp | 0x0042d5ce xor edx, edx | 0x0042d5d0 mov ecx, 0xffffffff | 0x0042d5d5 call 0x4a0270 | rax = BloombergLP::balcl::OptionValue::print(std::_1::basic_ostream>&,int,int)const (r14, rbp, 0, 0xffffffff); 0x0042d5da xor edi, edi | edi = 0; 0x0042d5dc cmp rax, rbp | 0x0042d5df setne dil | dil = (rax != rbp) ? 1 : 0; 0x0042d5e3 mov esi, 0x4dfafa | esi = "&ossStream == &(ossStream << obj)"; 0x0042d5e8 mov edx, 0x523 | edx = 0x523; 0x0042d5ed call 0x405440 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x0042d5f2 cmp byte [rip + 0x2f2899], 0 | | if (*(obj.veryVeryVerbose) != 0) { 0x0042d5f9 je 0x42d709 | 0x0042d5ff mov edi, 0x71fae8 | 0x0042d604 mov esi, 0x4dfb1c | 0x0042d609 mov edx, 7 | 0x0042d60e call 0x49f470 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "STREAM:", 7); 0x0042d613 mov rbp, rax | 0x0042d616 mov rax, qword [rax] | rax = *(rax); 0x0042d619 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x0042d61d add rsi, rbp | rsi += rbp; 0x0042d620 mov rdi, rsp | rdi = rsp; 0x0042d623 call 0x403e00 | std::_1::ios_base::getloc()const (); 0x0042d628 mov rdi, rsp | rdi = rsp; 0x0042d62b mov esi, 0x71fa30 | esi = std::__1::ctype::id; 0x0042d630 call 0x403eb0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x0042d635 mov rcx, qword [rax] | rcx = *(rax); 0x0042d638 mov rdi, rax | rdi = rax; 0x0042d63b mov esi, 0xa | esi = 0xa; 0x0042d640 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x0042d643 mov ebx, eax | ebx = eax; 0x0042d645 mov rdi, rsp | rdi = rsp; 0x0042d648 call 0x403f10 | std::_1::locale::~locale() (); 0x0042d64d movsx esi, bl | esi = (int32_t) bl; 0x0042d650 mov rdi, rbp | rdi = rbp; 0x0042d653 call 0x403c20 | std::_1::basic_ostream>::put(char) (); 0x0042d658 mov rdi, rbp | rdi = rbp; 0x0042d65b call 0x403dd0 | std::_1::basic_ostream>::flush() (); 0x0042d660 mov esi, 0x4e014e | 0x0042d665 mov edx, 1 | 0x0042d66a mov rdi, rbp | 0x0042d66d call 0x49f470 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbp, 0x4e014e, 1); 0x0042d672 mov rbp, rax | 0x0042d675 lea rsi, [rsp + 0x40] | 0x0042d67a mov rdi, rsp | 0x0042d67d call 0x49f980 | bsl::basic_stringbuf,bsl::allocator>::str()const (rsp, rsp + 0x40); 0x0042d682 mov rsi, rsp | 0x0042d685 mov rdi, rbp | 0x0042d688 call 0x49fa90 | rax = std::_1::basic_ostream>&bsl::operator << ,bsl::allocator>(std::_1::basic_ostream>&,bsl::basic_string,bsl::allocator>const&) (rbp, rsp); 0x0042d68d mov esi, 0x4e014e | 0x0042d692 mov edx, 1 | 0x0042d697 mov rdi, rax | 0x0042d69a call 0x49f470 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x4e014e, 1); 0x0042d69f mov rbp, rax | 0x0042d6a2 mov rax, qword [rax] | rax = *(rax); 0x0042d6a5 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x0042d6a9 add rsi, rbp | rsi += rbp; 0x0042d6ac lea rdi, [rsp + 0x30] | rdi = rsp + 0x30; 0x0042d6b1 call 0x403e00 | std::_1::ios_base::getloc()const (); 0x0042d6b6 lea rdi, [rsp + 0x30] | rdi = rsp + 0x30; 0x0042d6bb mov esi, 0x71fa30 | esi = std::__1::ctype::id; 0x0042d6c0 call 0x403eb0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x0042d6c5 mov rcx, qword [rax] | rcx = *(rax); 0x0042d6c8 mov rdi, rax | rdi = rax; 0x0042d6cb mov esi, 0xa | esi = 0xa; 0x0042d6d0 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x0042d6d3 mov ebx, eax | ebx = eax; 0x0042d6d5 lea rdi, [rsp + 0x30] | rdi = rsp + 0x30; 0x0042d6da call 0x403f10 | std::_1::locale::~locale() (); 0x0042d6df movsx esi, bl | esi = (int32_t) bl; 0x0042d6e2 mov rdi, rbp | rdi = rbp; 0x0042d6e5 call 0x403c20 | std::_1::basic_ostream>::put(char) (); 0x0042d6ea mov rdi, rbp | rdi = rbp; 0x0042d6ed call 0x403dd0 | std::_1::basic_ostream>::flush() (); 0x0042d6f2 cmp qword [rsp + 0x20], 0x17 | | if (*((rsp + 0x20)) == 0x17) { 0x0042d6f8 je 0x42d709 | goto label_2; | } 0x0042d6fa mov rsi, qword [rsp] | rsi = *(rsp); 0x0042d6fe mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042d703 mov rax, qword [rdi] | rax = *(rdi); 0x0042d706 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } | label_2: 0x0042d709 lea r12, [rsp + 0x40] | r12 = rsp + 0x40; 0x0042d70e mov rdi, rsp | 0x0042d711 mov rsi, r12 | 0x0042d714 call 0x49f980 | bsl::basic_stringbuf,bsl::allocator>::str()const (rsp, r12); 0x0042d719 mov r15, qword [rsp + 0x18] | r15 = *((rsp + 0x18)); 0x0042d71e cmp qword [rsp + 0x20], 0x17 | | if (*((rsp + 0x20)) != 0x17) { 0x0042d724 je 0x42d735 | 0x0042d726 mov rsi, qword [rsp] | rsi = *(rsp); 0x0042d72a mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042d72f mov rax, qword [rdi] | rax = *(rdi); 0x0042d732 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0042d735 cmp r13d, 6 | | if (r13d != 6) { 0x0042d739 je 0x42d750 | 0x0042d73b test r13d, r13d | | if (r13d == 0) { 0x0042d73e jne 0x42d7bc | 0x0042d740 mov ebp, 1 | 0x0042d745 test r15, r15 | | if (r15 != 0) { 0x0042d748 jne 0x42d8e2 | goto label_3; | } 0x0042d74e jmp 0x42d7c1 | 0x0042d750 mov eax, dword [r14 + 0x40] | eax = *((r14 + 0x40)); 0x0042d754 dec eax | eax--; 0x0042d756 cmp eax, 0x13 | | } else { | } else { | if (eax > 0x13) { 0x0042d759 ja 0x42d98a | goto label_4; | } | /* switch table (20 cases) at 0x4d0a58 */ 0x0042d75f jmp qword [rax*8 + 0x4d0a58] | 0x0042d766 lea rax, [r14 + 0x20] | rax = r14 + 0x20; 0x0042d76a cmp byte [rax], 0 | | if (*(rax) == 0) { 0x0042d76d jne 0x42d79b | 0x0042d76f jmp 0x42d7bc | goto label_5; 0x0042d771 lea rax, [r14 + 8] | rax = r14 + 8; 0x0042d775 cmp byte [rax], 0 | | if (*(rax) != 0) { 0x0042d778 jne 0x42d79b | goto label_6; | } 0x0042d77a jmp 0x42d7bc | goto label_5; 0x0042d77c lea rax, [r14 + 1] | rax = r14 + 1; 0x0042d780 cmp byte [rax], 0 | | if (*(rax) != 0) { 0x0042d783 jne 0x42d79b | goto label_6; | } 0x0042d785 jmp 0x42d7bc | goto label_5; 0x0042d787 lea rax, [r14 + 4] | rax = r14 + 4; 0x0042d78b cmp byte [rax], 0 | | if (*(rax) != 0) { 0x0042d78e jne 0x42d79b | goto label_6; | } 0x0042d790 jmp 0x42d7bc | goto label_5; 0x0042d792 lea rax, [r14 + 0x30] | rax = r14 + 0x30; 0x0042d796 cmp byte [rax], 0 | | if (*(rax) == 0) { 0x0042d799 je 0x42d7bc | goto label_5; | } | } | label_6: 0x0042d79b mov rdi, r14 | rdi = r14; 0x0042d79e mov esi, 0x44 | esi = 0x44; 0x0042d7a3 call 0x42ca00 | al = (anonymousnamespace)::u::hasValueDAB(BloombergLP::balcl::OptionValueconst&,char,int) (); 0x0042d7a8 test al, al | | if (al != 0) { 0x0042d7aa je 0x42d7bc | 0x0042d7ac mov ebp, 2 | 0x0042d7b1 test r15, r15 | | if (r15 != 0) { 0x0042d7b4 jne 0x42d8e2 | goto label_3; | } 0x0042d7ba jmp 0x42d7c1 | | } | label_5: 0x0042d7bc test r15, r15 | | } | } | if (r15 == 0) { 0x0042d7bf je 0x42d803 | goto label_7; | } 0x0042d7c1 mov eax, dword [r14 + 0x40] | eax = *((r14 + 0x40)); 0x0042d7c5 cmp rax, 0x14 | | if (rax > 0x14) { 0x0042d7c9 ja 0x42d98a | goto label_4; | } | /* switch table (21 cases) at 0x4d0af8 */ 0x0042d7cf jmp qword [rax*8 + 0x4d0af8] | 0x0042d7d6 add r14, 0x20 | r14 += 0x20; 0x0042d7da cmp byte [r14], 0 | | if (*(r14) == 0) { 0x0042d7de je 0x42d817 | goto label_1; | } | do { | label_0: 0x0042d7e0 cmp r13d, 0xa | | if (r13d < 0xa) { 0x0042d7e4 jl 0x42d8e0 | goto label_8; | } 0x0042d7ea mov rdi, rsp | 0x0042d7ed mov rsi, r12 | 0x0042d7f0 call 0x49f980 | bsl::basic_stringbuf,bsl::allocator>::str()const (rsp, r12); 0x0042d7f5 cmp qword [rsp + 0x20], 0x17 | | if (*((rsp + 0x20)) != 0x17) { 0x0042d7fb jne 0x42d86a | goto label_9; | } 0x0042d7fd mov bpl, byte [rsp] | bpl = *(rsp); 0x0042d801 jmp 0x42d87c | goto label_10; | label_7: 0x0042d803 mov ebp, 3 | 0x0042d808 jmp 0x42d8e2 | goto label_3; 0x0042d80d add r14, 8 | r14 += 8; 0x0042d811 cmp byte [r14], 0 | 0x0042d815 jne 0x42d7e0 | | } while (*(r14) != 0); | label_1: 0x0042d817 mov rbx, rsp | rbx = rsp; 0x0042d81a mov rdi, rbx | 0x0042d81d mov rsi, r12 | 0x0042d820 call 0x49f980 | bsl::basic_stringbuf,bsl::allocator>::str()const (rsp, r12); 0x0042d825 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0042d82a cmp qword [rsp + 0x18], 4 | 0x0042d830 mov r14b, 1 | r14b = 1; | if (*((rsp + 0x18)) == 4) { 0x0042d833 jne 0x42d849 | 0x0042d835 cmp rax, 0x17 | | if (rax != 0x17) { 0x0042d839 je 0x42d83f | 0x0042d83b mov rbx, qword [rsp] | rbx = *(rsp); | } 0x0042d83f cmp dword [rbx], 0x4c4c554e | 0x0042d845 setne r14b | r14b = (*(rbx) != 0x4c4c554e) ? 1 : 0; | } 0x0042d849 cmp rax, 0x17 | | if (rax != 0x17) { 0x0042d84d je 0x42d85e | 0x0042d84f mov rsi, qword [rsp] | rsi = *(rsp); 0x0042d853 mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042d858 mov rax, qword [rdi] | rax = *(rdi); 0x0042d85b call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0042d85e mov ebp, 4 | 0x0042d863 test r14b, r14b | | if (r14b == 0) { 0x0042d866 jne 0x42d8e2 | 0x0042d868 jmp 0x42d8e0 | goto label_8; | label_9: 0x0042d86a mov rsi, qword [rsp] | rsi = *(rsp); 0x0042d86e mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042d873 mov bpl, byte [rsi] | bpl = *(rsi); 0x0042d876 mov rax, qword [rdi] | rax = *(rdi); 0x0042d879 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | label_10: 0x0042d87c mov rbx, rsp | rbx = rsp; 0x0042d87f mov rdi, rbx | 0x0042d882 mov rsi, r12 | 0x0042d885 call 0x49f980 | bsl::basic_stringbuf,bsl::allocator>::str()const (rsp, r12); 0x0042d88a cmp qword [rsp + 0x20], 0x17 | | if (*((rsp + 0x20)) == 0x17) { 0x0042d890 jne 0x42d899 | 0x0042d892 mov bl, byte [r15 + rbx - 1] | bl = *((r15 + rbx - 1)); 0x0042d897 jmp 0x42d8ad | | } else { 0x0042d899 mov rsi, qword [rsp] | rsi = *(rsp); 0x0042d89d mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042d8a2 mov bl, byte [r15 + rsi - 1] | bl = *((r15 + rsi - 1)); 0x0042d8a7 mov rax, qword [rdi] | rax = *(rdi); 0x0042d8aa call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0042d8ad cmp r13d, 0xa | 0x0042d8b1 mov ecx, 0x22 | ecx = 0x22; 0x0042d8b6 mov edx, 0x5b | edx = 0x5b; | if (r13d == 0xa) { 0x0042d8bb cmove edx, ecx | edx = ecx; | } 0x0042d8be movsx esi, bpl | esi = (int32_t) bpl; 0x0042d8c2 mov eax, 0x5d | eax = 0x5d; | if (r13d == 0xa) { 0x0042d8c7 cmove eax, ecx | eax = ecx; | } 0x0042d8ca xor ebp, ebp | ebp = 0; 0x0042d8cc cmp edx, esi | 0x0042d8ce sete bpl | bpl = (edx == esi) ? 1 : 0; 0x0042d8d2 add ebp, 5 | ebp += 5; 0x0042d8d5 cmp edx, esi | | if (edx != esi) { 0x0042d8d7 jne 0x42d8e2 | goto label_3; | } 0x0042d8d9 movsx ecx, bl | ecx = (int32_t) bl; 0x0042d8dc cmp eax, ecx | | if (eax != ecx) { 0x0042d8de jne 0x42d8e2 | goto label_3; | } | label_8: 0x0042d8e0 xor ebp, ebp | ebp = 0; | } | label_3: 0x0042d8e2 lea rdi, [rsp + 0x38] | rdi = rsp + 0x38; 0x0042d8e7 mov esi, 0x4dfb88 | esi = 0x4dfb88; 0x0042d8ec call 0x403f50 | std::_1::basic_ostream>::~basic_ostream() (); 0x0042d8f1 mov qword [rsp + 0x40], 0x4dfcd8 | *((rsp + 0x40)) = vtable.bsl::basic_stringbuf_char__std::__1::char_traits_char___bsl::allocator_char___.0; 0x0042d8fa cmp qword [rsp + 0xa0], 0x17 | | if (*((rsp + 0xa0)) != 0x17) { 0x0042d903 je 0x42d91b | 0x0042d905 mov rsi, qword [rsp + 0x80] | rsi = *((rsp + 0x80)); 0x0042d90d mov rdi, qword [rsp + 0xa8] | rdi = *((rsp + 0xa8)); 0x0042d915 mov rax, qword [rdi] | rax = *(rdi); 0x0042d918 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0042d91b mov qword [rsp + 0x98], 0xffffffffffffffff | *((rsp + 0x98)) = 0xffffffffffffffff; 0x0042d927 lea rdi, [rsp + 0x40] | rdi = rsp + 0x40; 0x0042d92c call 0x403a50 | std::_1::basic_streambuf>::~basic_streambuf() (); 0x0042d931 lea rdi, [rsp + 0xc0] | rdi = rsp + 0xc0; 0x0042d939 call 0x403990 | std::_1::basic_ios>::~basic_ios() (); 0x0042d93e mov eax, ebp | eax = ebp; 0x0042d940 add rsp, 0x158 | 0x0042d947 pop rbx | 0x0042d948 pop r12 | 0x0042d94a pop r13 | 0x0042d94c pop r14 | 0x0042d94e pop r15 | 0x0042d950 pop rbp | 0x0042d951 ret | return rax; 0x0042d952 inc r14 | r14++; 0x0042d955 cmp byte [r14], 0 | | if (*(r14) != 0) { 0x0042d959 jne 0x42d7e0 | goto label_0; | } 0x0042d95f jmp 0x42d817 | goto label_1; 0x0042d964 add r14, 4 | r14 += 4; 0x0042d968 cmp byte [r14], 0 | | if (*(r14) != 0) { 0x0042d96c jne 0x42d7e0 | goto label_0; | } 0x0042d972 jmp 0x42d817 | goto label_1; 0x0042d977 add r14, 0x30 | r14 += 0x30; 0x0042d97b cmp byte [r14], 0 | | if (*(r14) != 0) { 0x0042d97f jne 0x42d7e0 | goto label_0; | } 0x0042d985 jmp 0x42d817 | goto label_1; | label_4: 0x0042d98a ud2 | __asm ("ud2"); | }