; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x455940 */ | #include | ; (fcn) method.BloombergLP::balber::BerUtil_DateImpUtil.putDateValue_std::__1::basic_streambuf_char__std::__1::char_traits_char_____BloombergLP::bdlt::Date_const__BloombergLP::balber::BerEncoderOptions_const_ () | int64_t method_BloombergLP::balber::BerUtil_DateImpUtil_putDateValue_std::_1::basic_streambuf_char_std::_1::char_traits_char_BloombergLP::bdlt::Date_const_BloombergLP::balber::BerEncoderOptions_const_ (int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::balber::BerUtil_DateImpUtil::putDateValue(std::__1::basic_streambuf >*, BloombergLP::bdlt::Date const&, BloombergLP::balber::BerEncoderOptions const*) */ 0x00455940 push r15 | 0x00455942 push r14 | 0x00455944 push rbx | 0x00455945 sub rsp, 0x40 | 0x00455949 mov rbx, rdx | rbx = rdx; 0x0045594c mov r15, rsi | r15 = rsi; 0x0045594f mov r14, rdi | r14 = rdi; 0x00455952 mov eax, dword [rsi] | eax = *(rsi); 0x00455954 mov dword [rsp + 8], eax | *((rsp + 8)) = eax; 0x00455958 lea rdi, [rsp + 8] | 0x0045595d xor esi, esi | 0x0045595f call 0x463ce0 | eax = BloombergLP::bdlt::Date::addDaysIfValid(int) (rsp + 8, 0); 0x00455964 mov ecx, 0xffffffff | ecx = 0xffffffff; 0x00455969 test eax, eax | 0x0045596b je 0x455979 | | while (1) { | label_0: 0x0045596d mov eax, ecx | eax = ecx; 0x0045596f add rsp, 0x40 | 0x00455973 pop rbx | 0x00455974 pop r14 | 0x00455976 pop r15 | 0x00455978 ret | return eax; 0x00455979 test rbx, rbx | | if (rbx == 0) { 0x0045597c je 0x455993 | goto label_1; | } 0x0045597e cmp byte [rbx + 0xd], 0 | | if (*((rbx + 0xd)) == 0) { 0x00455982 je 0x455993 | goto label_1; | } 0x00455984 mov rdi, r14 | 0x00455987 mov rsi, r15 | 0x0045598a call 0x4552a0 | eax = BloombergLP::balber::BerUtil_DateImpUtil::putCompactBinaryDateValue(std::_1::basic_streambuf>*,BloombergLP::bdlt::Dateconst&,BloombergLP::balber::BerEncoderOptionsconst*) (r14, r15); 0x0045598f mov ecx, eax | ecx = eax; 0x00455991 jmp 0x45596d | | } | label_1: 0x00455993 mov dword [rsp], 3 | *(rsp) = 3; 0x0045599a test rbx, rbx | | if (rbx != 0) { 0x0045599d je 0x4559a3 | 0x0045599f mov esi, dword [rbx] | esi = *(rbx); 0x004559a1 jmp 0x4559a8 | | } else { 0x004559a3 mov esi, 6 | | } 0x004559a8 mov rdi, rsp | 0x004559ab call 0x469860 | BloombergLP::bdlt::Iso8601UtilConfiguration::setFractionalSecondPrecision(int) (rsp, 6); 0x004559b0 lea rdi, [rsp + 0x10] | 0x004559b5 mov rcx, rsp | rcx = rsp; 0x004559b8 mov esi, 0x26 | 0x004559bd mov rdx, r15 | 0x004559c0 call 0x466370 | eax = BloombergLP::bdlt::Iso8601Util::generate(char*,int,BloombergLP::bdlt::Dateconst&,BloombergLP::bdlt::Iso8601UtilConfigurationconst&) (rsp + 0x10, 0x26, r15); 0x004559c5 mov ebx, eax | ebx = eax; 0x004559c7 mov rdi, r14 | 0x004559ca mov esi, eax | 0x004559cc call 0x453df0 | eax = BloombergLP::balber::BerUtil_LengthImpUtil::putLength(std::_1::basic_streambuf>*,int) (r14, eax); 0x004559d1 mov ecx, 0xffffffff | ecx = 0xffffffff; 0x004559d6 test eax, eax | | if (eax != 0) { 0x004559d8 jne 0x45596d | goto label_0; | } 0x004559da movsxd rbx, ebx | rbx = (int64_t) ebx; 0x004559dd mov rax, qword [r14] | rax = *(r14); 0x004559e0 lea rsi, [rsp + 0x10] | rsi = rsp + 0x10; 0x004559e5 mov rdi, r14 | rdi = r14; 0x004559e8 mov rdx, rbx | rdx = rbx; 0x004559eb call qword [rax + 0x60] | rax = uint64_t (*rax + 0x60)() (); 0x004559ee xor ecx, ecx | ecx = 0; 0x004559f0 cmp rax, rbx | 0x004559f3 setne cl | cl = (rax != rbx) ? 1 : 0; 0x004559f6 neg ecx | ecx = -ecx; 0x004559f8 jmp 0x45596d | goto label_0; | }