; assembly | /* r2dec pseudo code output */ | /* baljsn_decoder.t/none @ 0x48c300 */ | #include | ; (fcn) method.BloombergLP::bdlde::Utf8CheckingInStreamBufWrapper.seekoff_long_long__std::__1::ios_base::seekdir__unsigned_int_ () | int64_t method_BloombergLP::bdlde::Utf8CheckingInStreamBufWrapper_seekoff_long_long_std::_1::ios_base::seekdir_unsigned_int_ (int64_t arg6, int64_t arg5, int64_t arg4, uint32_t arg3, int64_t arg2, int64_t arg1, int64_t arg7) { | char * var_8h; | int64_t var_10h; | int64_t var_18h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | xmm0 = arg7; | /* BloombergLP::bdlde::Utf8CheckingInStreamBufWrapper::seekoff(long long, std::__1::ios_base::seekdir, unsigned int) */ 0x0048c300 push rbp | 0x0048c301 push r15 | 0x0048c303 push r14 | 0x0048c305 push r12 | 0x0048c307 push rbx | 0x0048c308 sub rsp, 0x20 | 0x0048c30c mov rbx, rdi | rbx = rdi; 0x0048c30f cmp edx, 2 | | if (edx != 2) { 0x0048c312 je 0x48c378 | 0x0048c314 mov rdi, qword [rbx + 0x40] | rdi = *((rbx + 0x40)); 0x0048c318 test rdi, rdi | | if (rdi != 0) { 0x0048c31b je 0x48c378 | 0x0048c31d mov r12d, ecx | r12d = ecx; 0x0048c320 mov r14, rsi | r14 = rsi; 0x0048c323 movzx esi, byte [rbx + 0x81] | esi = *((rbx + 0x81)); 0x0048c32a mov rbp, qword [rbx + 0x18] | rbp = *((rbx + 0x18)); 0x0048c32e mov rax, rsi | rax = rsi; 0x0048c331 shl rax, 4 | rax <<= 4; 0x0048c335 mov rcx, rbp | rcx = rbp; 0x0048c338 sub rcx, qword [rax + rbx + 0x10] | rcx -= *((rax + rbx + 0x10)); 0x0048c33d lea r15, [rbx + 0x70] | r15 = rbx + 0x70; 0x0048c341 add rcx, qword [rbx + 0x78] | rcx += *((rbx + 0x78)); 0x0048c345 cmp edx, 1 | | if (edx == 1) { 0x0048c348 je 0x48c384 | goto label_2; | } 0x0048c34a test edx, edx | | if (edx != 0) { 0x0048c34c jne 0x48c498 | goto label_3; | } 0x0048c352 test r14, r14 | | if (r14 != 0) { 0x0048c355 jne 0x48c3a8 | goto label_4; | } 0x0048c357 cmp dword [rbx + 0x48], 1 | | if (*((rbx + 0x48)) != 1) { 0x0048c35b jne 0x48c3a8 | goto label_4; | } 0x0048c35d cmp byte [rbx + 0x80], 0 | | if (*((rbx + 0x80)) == 0) { 0x0048c364 je 0x48c442 | goto label_0; | } 0x0048c36a mov dword [rbx + 0x48], 0 | *((rbx + 0x48)) = 0; 0x0048c371 xor eax, eax | eax = 0; 0x0048c373 xor r14d, r14d | r14d = 0; 0x0048c376 jmp 0x48c3b4 | | } | } else { 0x0048c378 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0048c37b movups xmmword [rbx + 0x70], xmm0 | __asm ("movups xmmword [rbx + 0x70], xmm0"); 0x0048c37f jmp 0x48c449 | goto label_5; | label_2: 0x0048c384 test r14, r14 | | if (r14 > 0) { 0x0048c387 jg 0x48c42c | goto label_6; | } 0x0048c38d cmp dword [rbx + 0x48], 1 | | if (*((rbx + 0x48)) == 1) { 0x0048c391 je 0x48c42c | goto label_6; | } 0x0048c397 mov rax, qword [rbx + 0x70] | rax = *((rbx + 0x70)); 0x0048c39b add r14, rcx | r14 += rcx; 0x0048c39e test r14, r14 | | if (r14 >= 0) { 0x0048c3a1 jns 0x48c3b4 | goto label_7; | } 0x0048c3a3 jmp 0x48c42c | goto label_6; | label_4: 0x0048c3a8 cmp rcx, r14 | | if (rcx < r14) { 0x0048c3ab jl 0x48c42c | goto label_6; | } 0x0048c3ad xor eax, eax | eax = 0; 0x0048c3af test r14, r14 | | if (r14 < 0) { 0x0048c3b2 js 0x48c42c | goto label_6; | } | } | label_7: 0x0048c3b4 mov rdx, r14 | rdx = r14; 0x0048c3b7 sub rdx, rcx | rdx -= rcx; | if (rdx == 0) { 0x0048c3ba je 0x48c46d | goto label_8; | } 0x0048c3c0 mov dword [rbx + 0x48], 0 | *((rbx + 0x48)) = 0; 0x0048c3c7 cmp rdx, 0xffffffff80000000 | | if (rdx >= 0xffffffff80000000) { 0x0048c3ce jl 0x48c3e9 | 0x0048c3d0 test sil, sil | | if (sil != 0) { 0x0048c3d3 jne 0x48c3e9 | goto label_9; | } 0x0048c3d5 test rbp, rbp | | if (rbp == 0) { 0x0048c3d8 je 0x48c3e9 | goto label_9; | } 0x0048c3da lea rcx, [rbp + rdx] | rcx = rbp + rdx; 0x0048c3df cmp qword [rbx + 0x10], rcx | | if (*((rbx + 0x10)) <= rcx) { 0x0048c3e3 jbe 0x48c47d | goto label_10; | } | } | label_9: 0x0048c3e9 cmp byte [rbx + 0x80], 0 | | if (*((rbx + 0x80)) != 0) { 0x0048c3f0 je 0x48c442 | 0x0048c3f2 mov rax, qword [rdi] | rax = *(rdi); 0x0048c3f5 mov rsi, r14 | rsi = r14; 0x0048c3f8 xor edx, edx | edx = 0; 0x0048c3fa mov ecx, r12d | ecx = r12d; 0x0048c3fd call qword [rax + 0x20] | rax = uint64_t (*rax + 0x20)() (); 0x0048c400 mov qword [rbx + 0x70], rax | *((rbx + 0x70)) = rax; 0x0048c404 mov qword [rbx + 0x78], rdx | *((rbx + 0x78)) = rdx; 0x0048c408 cmp r14, rdx | | if (r14 != rdx) { 0x0048c40b jne 0x48c489 | goto label_11; | } 0x0048c40d mov byte [rbx + 0x81], 0 | *((rbx + 0x81)) = 0; 0x0048c414 mov dword [rbx + 0x4c], 0 | *((rbx + 0x4c)) = 0; 0x0048c41b xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0048c41e movups xmmword [rbx + 0x10], xmm0 | __asm ("movups xmmword [rbx + 0x10], xmm0"); 0x0048c422 mov qword [rbx + 0x20], 0 | *((rbx + 0x20)) = 0; 0x0048c42a jmp 0x48c46d | goto label_8; | label_6: 0x0048c42c cmp byte [rbx + 0x80], 0 | | if (*((rbx + 0x80)) == 0) { 0x0048c433 je 0x48c442 | goto label_0; | } | label_1: 0x0048c435 mov rax, qword [rdi] | rax = *(rdi); 0x0048c438 xor esi, esi | esi = 0; 0x0048c43a xor edx, edx | edx = 0; 0x0048c43c mov ecx, r12d | ecx = r12d; 0x0048c43f call qword [rax + 0x20] | eax = uint64_t (*rax + 0x20)() (); | } | label_0: 0x0048c442 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0048c445 movups xmmword [r15], xmm0 | __asm ("movups xmmword [r15], xmm0"); | label_5: 0x0048c449 mov qword [rbx + 0x48], 1 | *((rbx + 0x48)) = 1; 0x0048c451 mov byte [rbx + 0x81], 0 | *((rbx + 0x81)) = 0; 0x0048c458 movups xmmword [rbx + 0x10], xmm0 | __asm ("movups xmmword [rbx + 0x10], xmm0"); 0x0048c45c mov qword [rbx + 0x20], 0 | *((rbx + 0x20)) = 0; 0x0048c464 mov r14, 0xffffffffffffffff | r14 = 0xffffffffffffffff; 0x0048c46b xor eax, eax | eax = 0; | do { | label_8: 0x0048c46d mov rdx, r14 | rdx = r14; 0x0048c470 add rsp, 0x20 | 0x0048c474 pop rbx | 0x0048c475 pop r12 | 0x0048c477 pop r14 | 0x0048c479 pop r15 | 0x0048c47b pop rbp | 0x0048c47c ret | return rax; | label_10: 0x0048c47d movsxd rcx, edx | rcx = (int64_t) edx; 0x0048c480 add rbp, rcx | rbp += rcx; 0x0048c483 mov qword [rbx + 0x18], rbp | *((rbx + 0x18)) = rbp; 0x0048c487 jmp 0x48c46d | | } while (1); | label_11: 0x0048c489 cmp byte [rbx + 0x80], 0 | | if (*((rbx + 0x80)) == 0) { 0x0048c490 je 0x48c442 | goto label_0; | } 0x0048c492 mov rdi, qword [rbx + 0x40] | rdi = *((rbx + 0x40)); 0x0048c496 jmp 0x48c435 | goto label_1; | label_3: 0x0048c498 mov qword [rsp], 0x61fc30 | *(rsp) = "invalid 'whence' in 'seek'; 0x0048c4a0 mov qword [rsp + 8], 0x61fc4b | *((rsp + 8)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlde/bdlde_utf8checkinginstreambufwrapper.cpp"; 0x0048c4a9 mov dword [rsp + 0x10], 0xf0 | *((rsp + 0x10)) = 0xf0; 0x0048c4b1 mov qword [rsp + 0x18], 0x63b0cc | *((rsp + 0x18)) = obj.BloombergLP::bsls::Assert::k_LEVEL_INVOKE; 0x0048c4ba mov rdi, rsp | 0x0048c4bd call 0x4cc970 | rax = BloombergLP::bsls::Assert::invokeHandlerNoReturn(BloombergLP::bsls::AssertViolationconst&) (rsp, rsi, rdx, rcx, r8, r9); 0x0048c4c2 nop word cs:[rax + rax] | 0x0048c4cc nop dword [rax] | | }