; assembly | /* r2dec pseudo code output */ | /* baljsn_decoder.t/assume @ 0x48c160 */ | #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) */ 0x0048c160 push rbp | 0x0048c161 push r15 | 0x0048c163 push r14 | 0x0048c165 push r12 | 0x0048c167 push rbx | 0x0048c168 sub rsp, 0x20 | 0x0048c16c mov rbx, rdi | rbx = rdi; 0x0048c16f cmp edx, 2 | | if (edx != 2) { 0x0048c172 je 0x48c1d8 | 0x0048c174 mov rdi, qword [rbx + 0x40] | rdi = *((rbx + 0x40)); 0x0048c178 test rdi, rdi | | if (rdi != 0) { 0x0048c17b je 0x48c1d8 | 0x0048c17d mov r12d, ecx | r12d = ecx; 0x0048c180 mov r14, rsi | r14 = rsi; 0x0048c183 movzx esi, byte [rbx + 0x81] | esi = *((rbx + 0x81)); 0x0048c18a mov rbp, qword [rbx + 0x18] | rbp = *((rbx + 0x18)); 0x0048c18e mov rax, rsi | rax = rsi; 0x0048c191 shl rax, 4 | rax <<= 4; 0x0048c195 mov rcx, rbp | rcx = rbp; 0x0048c198 sub rcx, qword [rax + rbx + 0x10] | rcx -= *((rax + rbx + 0x10)); 0x0048c19d lea r15, [rbx + 0x70] | r15 = rbx + 0x70; 0x0048c1a1 add rcx, qword [rbx + 0x78] | rcx += *((rbx + 0x78)); 0x0048c1a5 cmp edx, 1 | | if (edx == 1) { 0x0048c1a8 je 0x48c1e4 | goto label_2; | } 0x0048c1aa test edx, edx | | if (edx != 0) { 0x0048c1ac jne 0x48c2f0 | goto label_3; | } 0x0048c1b2 test r14, r14 | | if (r14 != 0) { 0x0048c1b5 jne 0x48c208 | goto label_4; | } 0x0048c1b7 cmp dword [rbx + 0x48], 1 | | if (*((rbx + 0x48)) != 1) { 0x0048c1bb jne 0x48c208 | goto label_4; | } 0x0048c1bd cmp byte [rbx + 0x80], 0 | | if (*((rbx + 0x80)) == 0) { 0x0048c1c4 je 0x48c2a0 | goto label_0; | } 0x0048c1ca mov dword [rbx + 0x48], 0 | *((rbx + 0x48)) = 0; 0x0048c1d1 xor eax, eax | eax = 0; 0x0048c1d3 xor r14d, r14d | r14d = 0; 0x0048c1d6 jmp 0x48c214 | | } | } else { 0x0048c1d8 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0048c1db movups xmmword [rbx + 0x70], xmm0 | __asm ("movups xmmword [rbx + 0x70], xmm0"); 0x0048c1df jmp 0x48c2a7 | goto label_5; | label_2: 0x0048c1e4 test r14, r14 | | if (r14 > 0) { 0x0048c1e7 jg 0x48c28a | goto label_6; | } 0x0048c1ed cmp dword [rbx + 0x48], 1 | | if (*((rbx + 0x48)) == 1) { 0x0048c1f1 je 0x48c28a | goto label_6; | } 0x0048c1f7 mov rax, qword [rbx + 0x70] | rax = *((rbx + 0x70)); 0x0048c1fb add r14, rcx | r14 += rcx; 0x0048c1fe test r14, r14 | | if (r14 >= 0) { 0x0048c201 jns 0x48c214 | goto label_7; | } 0x0048c203 jmp 0x48c28a | goto label_6; | label_4: 0x0048c208 cmp rcx, r14 | | if (rcx < r14) { 0x0048c20b jl 0x48c28a | goto label_6; | } 0x0048c20d xor eax, eax | eax = 0; 0x0048c20f test r14, r14 | | if (r14 < 0) { 0x0048c212 js 0x48c28a | goto label_6; | } | } | label_7: 0x0048c214 mov rdx, r14 | rdx = r14; 0x0048c217 sub rdx, rcx | rdx -= rcx; | if (rdx == 0) { 0x0048c21a je 0x48c2cb | goto label_8; | } 0x0048c220 mov dword [rbx + 0x48], 0 | *((rbx + 0x48)) = 0; 0x0048c227 cmp rdx, 0xffffffff80000000 | | if (rdx >= 0xffffffff80000000) { 0x0048c22e jl 0x48c247 | 0x0048c230 test sil, sil | | if (sil != 0) { 0x0048c233 jne 0x48c247 | goto label_9; | } 0x0048c235 test rbp, rbp | | if (rbp == 0) { 0x0048c238 je 0x48c247 | goto label_9; | } 0x0048c23a add rbp, rdx | rbp += rdx; 0x0048c23d cmp qword [rbx + 0x10], rbp | | if (*((rbx + 0x10)) <= rbp) { 0x0048c241 jbe 0x48c2db | goto label_10; | } | } | label_9: 0x0048c247 cmp byte [rbx + 0x80], 0 | | if (*((rbx + 0x80)) != 0) { 0x0048c24e je 0x48c2a0 | 0x0048c250 mov rax, qword [rdi] | rax = *(rdi); 0x0048c253 mov rsi, r14 | rsi = r14; 0x0048c256 xor edx, edx | edx = 0; 0x0048c258 mov ecx, r12d | ecx = r12d; 0x0048c25b call qword [rax + 0x20] | rax = uint64_t (*rax + 0x20)() (); 0x0048c25e mov qword [rbx + 0x70], rax | *((rbx + 0x70)) = rax; 0x0048c262 mov qword [rbx + 0x78], rdx | *((rbx + 0x78)) = rdx; 0x0048c266 cmp r14, rdx | | if (r14 != rdx) { 0x0048c269 jne 0x48c2e1 | goto label_11; | } 0x0048c26b mov byte [rbx + 0x81], 0 | *((rbx + 0x81)) = 0; 0x0048c272 mov dword [rbx + 0x4c], 0 | *((rbx + 0x4c)) = 0; 0x0048c279 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0048c27c movups xmmword [rbx + 0x10], xmm0 | __asm ("movups xmmword [rbx + 0x10], xmm0"); 0x0048c280 mov qword [rbx + 0x20], 0 | *((rbx + 0x20)) = 0; 0x0048c288 jmp 0x48c2cb | goto label_8; | label_6: 0x0048c28a cmp byte [rbx + 0x80], 0 | | if (*((rbx + 0x80)) == 0) { 0x0048c291 je 0x48c2a0 | goto label_0; | } | label_1: 0x0048c293 mov rax, qword [rdi] | rax = *(rdi); 0x0048c296 xor esi, esi | esi = 0; 0x0048c298 xor edx, edx | edx = 0; 0x0048c29a mov ecx, r12d | ecx = r12d; 0x0048c29d call qword [rax + 0x20] | eax = uint64_t (*rax + 0x20)() (); | } | label_0: 0x0048c2a0 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0048c2a3 movups xmmword [r15], xmm0 | __asm ("movups xmmword [r15], xmm0"); | label_5: 0x0048c2a7 mov qword [rbx + 0x48], 1 | *((rbx + 0x48)) = 1; 0x0048c2af mov byte [rbx + 0x81], 0 | *((rbx + 0x81)) = 0; 0x0048c2b6 movups xmmword [rbx + 0x10], xmm0 | __asm ("movups xmmword [rbx + 0x10], xmm0"); 0x0048c2ba mov qword [rbx + 0x20], 0 | *((rbx + 0x20)) = 0; 0x0048c2c2 mov r14, 0xffffffffffffffff | r14 = 0xffffffffffffffff; 0x0048c2c9 xor eax, eax | eax = 0; | do { | label_8: 0x0048c2cb mov rdx, r14 | rdx = r14; 0x0048c2ce add rsp, 0x20 | 0x0048c2d2 pop rbx | 0x0048c2d3 pop r12 | 0x0048c2d5 pop r14 | 0x0048c2d7 pop r15 | 0x0048c2d9 pop rbp | 0x0048c2da ret | return rax; | label_10: 0x0048c2db mov qword [rbx + 0x18], rbp | *((rbx + 0x18)) = rbp; 0x0048c2df jmp 0x48c2cb | | } while (1); | label_11: 0x0048c2e1 cmp byte [rbx + 0x80], 0 | | if (*((rbx + 0x80)) == 0) { 0x0048c2e8 je 0x48c2a0 | goto label_0; | } 0x0048c2ea mov rdi, qword [rbx + 0x40] | rdi = *((rbx + 0x40)); 0x0048c2ee jmp 0x48c293 | goto label_1; | label_3: 0x0048c2f0 mov qword [rsp], 0x61fd70 | *(rsp) = "invalid 'whence' in 'seek'; 0x0048c2f8 mov qword [rsp + 8], 0x61fd8b | *((rsp + 8)) = "/home/parsa/experiments/assumptions/crush/ccm-assume/groups/bdl/bdlde/bdlde_utf8checkinginstreambufwrapper.cpp"; 0x0048c301 mov dword [rsp + 0x10], 0xf0 | *((rsp + 0x10)) = 0xf0; 0x0048c309 mov qword [rsp + 0x18], 0x63b10c | *((rsp + 0x18)) = obj.BloombergLP::bsls::Assert::k_LEVEL_INVOKE; 0x0048c312 mov rdi, rsp | 0x0048c315 call 0x4cc1f0 | BloombergLP::bsls::Assert::invokeHandlerNoReturn(BloombergLP::bsls::AssertViolationconst&) (rsp, rsi, rdx, rcx, r8, r9); 0x0048c31a nop word [rax + rax] | | }