; assembly | /* r2dec pseudo code output */ | /* bdlde_quotedprintableencoder.t/none @ 0x41ef90 */ | #include | ; (fcn) method.BloombergLP::bdlde::QuotedPrintableEncoder.convert_char__int__int__char_const__char_const__int_ () | int64_t method_BloombergLP::bdlde::QuotedPrintableEncoder_convert_char_int_int_char_const_char_const_int_ (int64_t arg_38h, size_t arg6, uint32_t arg5, char * arg4, uint32_t arg3, char * arg2, char * arg1) { | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlde::QuotedPrintableEncoder::convert(char*, int*, int*, char const*, char const*, int) */ 0x0041ef90 push rbp | 0x0041ef91 push r15 | 0x0041ef93 push r14 | 0x0041ef95 push r13 | 0x0041ef97 push r12 | 0x0041ef99 push rbx | 0x0041ef9a mov eax, dword [rdi + 0x1c] | eax = *((rdi + 0x1c)); 0x0041ef9d cmp eax, 2 | | if (eax != 2) { 0x0041efa0 je 0x41efa7 | 0x0041efa2 cmp eax, 0xffffffff | | if (eax != 0xffffffff) { 0x0041efa5 jne 0x41efc4 | goto label_3; | } | } 0x0041efa7 mov dword [rdi + 0x1c], 0xffffffff | *((rdi + 0x1c)) = 0xffffffff; 0x0041efae mov dword [rdx], 0 | *(rdx) = 0; 0x0041efb4 mov dword [rcx], 0 | *(rcx) = 0; 0x0041efba mov eax, 0xffffffff | eax = 0xffffffff; 0x0041efbf jmp 0x41f50d | goto label_4; | label_3: 0x0041efc4 mov r10d, dword [rsp + 0x38] | r10d = *((rsp + 0x38)); 0x0041efc9 test r10d, r10d | | if (r10d == 0) { 0x0041efcc je 0x41f4f3 | goto label_5; | } 0x0041efd2 cmp r8, r9 | | if (r8 < r9) { 0x0041efd5 jae 0x41efde | 0x0041efd7 mov dword [rdi + 0x1c], 1 | *((rdi + 0x1c)) = 1; | } 0x0041efde mov r11d, dword [rdi + 8] | r11d = *((rdi + 8)); 0x0041efe2 add r10d, r11d | r10d += r11d; 0x0041efe5 mov ebx, r11d | ebx = r11d; 0x0041efe8 mov r14, r8 | r14 = r8; 0x0041efeb jmp 0x41efff | goto label_6; | label_0: 0x0041eff0 mov r15, rsi | r15 = rsi; | label_1: 0x0041eff3 mov rsi, r15 | 0x0041eff6 cmp ebx, r10d | | if (ebx == r10d) { 0x0041eff9 je 0x41f4e3 | goto label_7; | } | label_6: 0x0041efff mov eax, dword [rdi + 0x28] | eax = *((rdi + 0x28)); 0x0041f002 cmp r14, r9 | | if (r14 < r9) { 0x0041f005 jb 0x41f02d | goto label_8; | } 0x0041f007 test eax, eax | | if (eax != 0) { 0x0041f009 jne 0x41f031 | goto label_9; | } 0x0041f00b jmp 0x41f4e6 | goto label_10; | do { 0x0041f010 cdqe | rax = (int64_t) eax; 0x0041f012 lea rbx, [rax - 1] | rbx = rax - 1; 0x0041f016 mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f019 mov al, byte [rdi + rax + 0x1f] | al = *((rdi + rax + 0x1f)); 0x0041f01d mov byte [rsi], al | *(rsi) = al; 0x0041f01f inc rsi | rsi++; 0x0041f022 mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f025 mov eax, dword [rdi + 0x28] | eax = *((rdi + 0x28)); 0x0041f028 inc ebx | ebx++; 0x0041f02a mov dword [rdi + 8], ebx | *((rdi + 8)) = ebx; | label_8: 0x0041f02d test eax, eax | | if (eax == 0) { 0x0041f02f je 0x41f040 | goto label_11; | } | label_9: 0x0041f031 cmp ebx, r10d | 0x0041f034 jne 0x41f010 | | } while (ebx != r10d); 0x0041f036 mov r13d, r10d | r13d = r10d; 0x0041f039 jmp 0x41f045 | goto label_12; | label_11: 0x0041f040 xor eax, eax | eax = 0; 0x0041f042 mov r13d, ebx | r13d = ebx; | label_12: 0x0041f045 movzx r15d, byte [rdi + 0x30] | r15d = *((rdi + 0x30)); 0x0041f04a test r15, r15 | | if (r15 != 0) { 0x0041f04d je 0x41f0e0 | 0x0041f053 mov r12b, 1 | r12b = 1; 0x0041f056 cmp r14, r9 | | if (r14 < r9) { 0x0041f059 jae 0x41f0e3 | 0x0041f05f cmp r13d, r10d | | if (r13d == r10d) { 0x0041f062 je 0x41f0e3 | goto label_13; | } 0x0041f068 mov rbx, qword [rdi + 0x10] | rbx = *((rdi + 0x10)); 0x0041f06c movzx ebp, byte [r14] | ebp = *(r14); 0x0041f070 mov bl, byte [rbx + rbp] | bl = *((rbx + rbp)); 0x0041f073 cmp r15b, 0xd | | if (r15b != 0xd) { 0x0041f077 jne 0x41f0f1 | goto label_14; | } 0x0041f07d cmp bl, 2 | | if (bl != 2) { 0x0041f080 jne 0x41f12b | goto label_15; | } 0x0041f086 cmp byte [rdi + 0x31], 0 | | if (*((rdi + 0x31)) == 0) { 0x0041f08a je 0x41f218 | goto label_16; | } 0x0041f090 mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f093 inc dword [rdi + 8] | *((rdi + 8))++; 0x0041f096 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f09a lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f09d mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f0a0 mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f0a5 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f0a9 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f0ac mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f0af mov byte [rdi + rax + 0x20], 0xd | *((rdi + rax + 0x20)) = 0xd; 0x0041f0b4 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f0b8 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f0bb mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f0be mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f0c3 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f0c7 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f0ca mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f0cd mov byte [rdi + rax + 0x20], 0xd | *((rdi + rax + 0x20)) = 0xd; 0x0041f0d2 mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f0d5 lea eax, [rbx + 4] | eax = rbx + 4; 0x0041f0d8 jmp 0x41f233 | | } else { 0x0041f0e0 xor r12d, r12d | r12d = 0; | } | label_13: 0x0041f0e3 cmp r14, r9 | | if (r14 < r9) { 0x0041f0e6 jb 0x41f253 | goto label_17; | } 0x0041f0ec jmp 0x41eff0 | goto label_0; | label_14: 0x0041f0f1 dec bl | bl--; 0x0041f0f3 cmp bl, 1 | | if (bl <= 1) { 0x0041f0f6 ja 0x41f16b | 0x0041f0f8 mov ebx, r15d | ebx = r15d; 0x0041f0fb and ebx, 0xf | ebx &= 0xf; 0x0041f0fe mov bl, byte [rbx + 0x44fe45] | bl = *((rbx + str.0123456789ABCDEF)); 0x0041f104 lea ebp, [rax + 1] | ebp = rax + 1; 0x0041f107 mov dword [rdi + 0x28], ebp | *((rdi + 0x28)) = ebp; 0x0041f10a cdqe | rax = (int64_t) eax; 0x0041f10c mov byte [rdi + rax + 0x20], bl | *((rdi + rax + 0x20)) = bl; 0x0041f110 shr r15, 4 | r15 >>= 4; 0x0041f114 mov al, byte [r15 + 0x44fe45] | al = *((r15 + str.0123456789ABCDEF)); 0x0041f11b movsxd rbx, dword [rdi + 0x28] | rbx = *((rdi + 0x28)); 0x0041f11f lea ebp, [rbx + 1] | ebp = rbx + 1; 0x0041f122 mov dword [rdi + 0x28], ebp | *((rdi + 0x28)) = ebp; 0x0041f125 mov byte [rdi + rbx + 0x20], al | *((rdi + rbx + 0x20)) = al; 0x0041f129 jmp 0x41f147 | goto label_18; | label_15: 0x0041f12b lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f12e mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f131 cdqe | rax = (int64_t) eax; 0x0041f133 mov byte [rdi + rax + 0x20], 0x44 | *((rdi + rax + 0x20)) = 0x44; 0x0041f138 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f13c lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f13f mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f142 mov byte [rdi + rax + 0x20], 0x30 | *((rdi + rax + 0x20)) = 0x30; | label_18: 0x0041f147 mov eax, dword [rdi + 4] | eax = *((rdi + 4)); 0x0041f14a mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f14d sub ebx, dword [rdi + 0x2c] | ebx -= *((rdi + 0x2c)); 0x0041f150 add eax, 0xfffffffd | eax += 0xfffffffd; 0x0041f153 cmp ebx, eax | | if (ebx >= eax) { 0x0041f155 jge 0x41f189 | goto label_19; | } 0x0041f157 mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f15a mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f15d inc ebx | ebx++; 0x0041f15f mov dword [rdi + 8], ebx | *((rdi + 8)) = ebx; 0x0041f162 mov byte [rdi + 0x31], 0 | *((rdi + 0x31)) = 0; 0x0041f166 jmp 0x41f23d | goto label_20; | } 0x0041f16b sub r13d, dword [rdi + 0x2c] | r13d -= *((rdi + 0x2c)); 0x0041f16f mov ebx, dword [rdi + 4] | ebx = *((rdi + 4)); 0x0041f172 dec ebx | ebx--; 0x0041f174 cmp r13d, ebx | | if (r13d < ebx) { 0x0041f177 jge 0x41f1cb | 0x0041f179 mov byte [rsi], r15b | *(rsi) = r15b; 0x0041f17c mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f17f inc ebx | ebx++; 0x0041f181 mov dword [rdi + 8], ebx | *((rdi + 8)) = ebx; 0x0041f184 jmp 0x41f209 | goto label_21; | label_19: 0x0041f189 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f18d lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f190 mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f193 mov byte [rdi + rax + 0x20], 0x3d | *((rdi + rax + 0x20)) = 0x3d; 0x0041f198 mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f19b inc dword [rdi + 8] | *((rdi + 8))++; 0x0041f19e movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f1a2 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f1a5 mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f1a8 mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f1ad movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f1b1 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f1b4 mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f1b7 mov byte [rdi + rax + 0x20], 0xd | *((rdi + rax + 0x20)) = 0xd; 0x0041f1bc mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f1bf lea eax, [rbx + 2] | eax = rbx + 2; 0x0041f1c2 mov dword [rdi + 0x2c], eax | *((rdi + 0x2c)) = eax; 0x0041f1c5 mov byte [rdi + 0x31], 0 | *((rdi + 0x31)) = 0; 0x0041f1c9 jmp 0x41f23d | goto label_20; | } 0x0041f1cb lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f1ce mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f1d1 cdqe | rax = (int64_t) eax; 0x0041f1d3 mov byte [rdi + rax + 0x20], r15b | *((rdi + rax + 0x20)) = r15b; 0x0041f1d8 mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f1db inc dword [rdi + 8] | *((rdi + 8))++; 0x0041f1de movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f1e2 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f1e5 mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f1e8 mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f1ed movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f1f1 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f1f4 mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f1f7 mov byte [rdi + rax + 0x20], 0xd | *((rdi + rax + 0x20)) = 0xd; 0x0041f1fc mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f1ff lea eax, [rbx + 2] | eax = rbx + 2; 0x0041f202 mov dword [rdi + 0x2c], eax | *((rdi + 0x2c)) = eax; 0x0041f205 mov byte [rdi + 0x31], 0 | *((rdi + 0x31)) = 0; | label_21: 0x0041f209 mov rax, qword [rdi + 0x10] | rax = *((rdi + 0x10)); 0x0041f20d cmp byte [rax + r15], 3 | 0x0041f212 sete byte [rdi + 0x31] | rdi + 0x31 = (*((rax + r15)) == 3) ? 1 : 0; 0x0041f216 jmp 0x41f23d | goto label_20; | label_16: 0x0041f218 mov byte [rsi], 0xd | *(rsi) = 0xd; 0x0041f21b inc dword [rdi + 8] | *((rdi + 8))++; 0x0041f21e movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f222 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f225 mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f228 mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f22d mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f230 lea eax, [rbx + 1] | eax = rbx + 1; | } 0x0041f233 mov dword [rdi + 0x2c], eax | *((rdi + 0x2c)) = eax; 0x0041f236 mov byte [rdi + 0x31], 0 | *((rdi + 0x31)) = 0; 0x0041f23a inc r14 | r14++; | label_20: 0x0041f23d inc rsi | rsi++; 0x0041f240 mov byte [rdi + 0x30], 0 | *((rdi + 0x30)) = 0; 0x0041f244 xor r12d, r12d | r12d = 0; 0x0041f247 mov r13d, ebx | r13d = ebx; 0x0041f24a cmp r14, r9 | | if (r14 >= r9) { 0x0041f24d jae 0x41eff0 | goto label_0; | } | label_17: 0x0041f253 cmp r13d, r10d | | if (r13d == r10d) { 0x0041f256 je 0x41eff0 | goto label_0; | } 0x0041f25c test r12b, r12b | | if (r12b != 0) { 0x0041f25f jne 0x41eff0 | goto label_0; | } 0x0041f265 nop word cs:[rax + rax] | 0x0041f26f nop | | label_2: 0x0041f270 cmp dword [rdi + 0x28], 0 | | if (*((rdi + 0x28)) != 0) { 0x0041f274 jne 0x41eff0 | goto label_0; | } 0x0041f27a mov rbp, qword [rdi + 0x10] | rbp = *((rdi + 0x10)); 0x0041f27e movzx eax, byte [r14] | eax = *(r14); 0x0041f282 movzx r12d, al | r12d = (int32_t) al; 0x0041f286 movsx ebp, byte [rbp + r12] | ebp = *((rbp + r12)); 0x0041f28c cmp ebp, 4 | | if (ebp <= 4) { 0x0041f28f ja 0x41f29e | | /* switch table (5 cases) at 0x44fd00 */ 0x0041f291 jmp qword [rbp*8 + 0x44fd00] | 0x0041f298 inc r14 | r14++; 0x0041f29b mov byte [rdi + 0x30], al | *((rdi + 0x30)) = al; | } 0x0041f29e mov r15, rsi | r15 = rsi; 0x0041f2a1 jmp 0x41f4bf | goto label_22; 0x0041f2a6 sub r13d, dword [rdi + 0x2c] | r13d -= *((rdi + 0x2c)); 0x0041f2aa mov ebx, dword [rdi + 4] | ebx = *((rdi + 4)); 0x0041f2ad dec ebx | ebx--; 0x0041f2af cmp r13d, ebx | | if (r13d < ebx) { 0x0041f2b2 jge 0x41f380 | 0x0041f2b8 mov byte [rsi], al | *(rsi) = al; 0x0041f2ba mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f2bd inc ebx | ebx++; 0x0041f2bf mov dword [rdi + 8], ebx | *((rdi + 8)) = ebx; 0x0041f2c2 jmp 0x41f3bb | goto label_23; 0x0041f2c7 mov eax, dword [rdi] | eax = *(rdi); 0x0041f2c9 dec eax | eax--; 0x0041f2cb lea r15, [rsi + 1] | r15 = rsi + 1; 0x0041f2cf cmp eax, 1 | | if (eax <= 1) { 0x0041f2d2 ja 0x41f3d9 | 0x0041f2d8 cmp byte [rdi + 0x31], 0 | | if (*((rdi + 0x31)) == 0) { 0x0041f2dc je 0x41f497 | goto label_24; | } 0x0041f2e2 mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f2e5 inc dword [rdi + 8] | *((rdi + 8))++; 0x0041f2e8 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f2ec lea esi, [rax + 1] | esi = rax + 1; 0x0041f2ef mov dword [rdi + 0x28], esi | *((rdi + 0x28)) = esi; 0x0041f2f2 mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f2f7 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f2fb lea esi, [rax + 1] | esi = rax + 1; 0x0041f2fe mov dword [rdi + 0x28], esi | *((rdi + 0x28)) = esi; 0x0041f301 mov byte [rdi + rax + 0x20], 0xd | *((rdi + rax + 0x20)) = 0xd; 0x0041f306 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f30a lea esi, [rax + 1] | esi = rax + 1; 0x0041f30d mov dword [rdi + 0x28], esi | *((rdi + 0x28)) = esi; 0x0041f310 mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f315 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f319 lea esi, [rax + 1] | esi = rax + 1; 0x0041f31c mov dword [rdi + 0x28], esi | *((rdi + 0x28)) = esi; 0x0041f31f mov byte [rdi + rax + 0x20], 0xd | *((rdi + rax + 0x20)) = 0xd; 0x0041f324 mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f327 lea eax, [rbx + 4] | eax = rbx + 4; 0x0041f32a jmp 0x41f4b2 | goto label_25; 0x0041f32f lea r15, [rsi + 1] | r15 = rsi + 1; 0x0041f333 mov eax, r12d | eax = r12d; 0x0041f336 and eax, 0xf | eax &= 0xf; 0x0041f339 movzx eax, byte [rax + 0x44fe45] | eax = *((rax + str.0123456789ABCDEF)); 0x0041f340 mov byte [rdi + 0x20], al | *((rdi + 0x20)) = al; 0x0041f343 shr r12, 4 | r12 >>= 4; 0x0041f347 movzx eax, byte [r12 + 0x44fe45] | eax = *((r12 + str.0123456789ABCDEF)); 0x0041f350 mov dword [rdi + 0x28], 2 | *((rdi + 0x28)) = 2; 0x0041f357 mov byte [rdi + 0x21], al | *((rdi + 0x21)) = al; 0x0041f35a sub r13d, dword [rdi + 0x2c] | r13d -= *((rdi + 0x2c)); 0x0041f35e inc r14 | r14++; 0x0041f361 mov eax, dword [rdi + 4] | eax = *((rdi + 4)); 0x0041f364 add eax, 0xfffffffd | eax += 0xfffffffd; 0x0041f367 cmp r13d, eax | | if (r13d >= eax) { 0x0041f36a jge 0x41f41c | goto label_26; | } 0x0041f370 mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f373 mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f376 inc ebx | ebx++; 0x0041f378 mov dword [rdi + 8], ebx | *((rdi + 8)) = ebx; 0x0041f37b jmp 0x41f491 | | } else { 0x0041f380 mov dword [rdi + 0x28], 1 | *((rdi + 0x28)) = 1; 0x0041f387 mov byte [rdi + 0x20], al | *((rdi + 0x20)) = al; 0x0041f38a mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f38d inc dword [rdi + 8] | *((rdi + 8))++; 0x0041f390 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f394 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f397 mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f39a mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f39f movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f3a3 lea ebx, [rax + 1] | ebx = rax + 1; 0x0041f3a6 mov dword [rdi + 0x28], ebx | *((rdi + 0x28)) = ebx; 0x0041f3a9 mov byte [rdi + rax + 0x20], 0xd | *((rdi + rax + 0x20)) = 0xd; 0x0041f3ae mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f3b1 lea eax, [rbx + 2] | eax = rbx + 2; 0x0041f3b4 mov dword [rdi + 0x2c], eax | *((rdi + 0x2c)) = eax; 0x0041f3b7 mov byte [rdi + 0x31], 0 | *((rdi + 0x31)) = 0; | label_23: 0x0041f3bb inc rsi | rsi++; 0x0041f3be inc r14 | r14++; 0x0041f3c1 mov rax, qword [rdi + 0x10] | rax = *((rdi + 0x10)); 0x0041f3c5 cmp byte [rax + r12], 3 | 0x0041f3ca sete byte [rdi + 0x31] | rdi + 0x31 = (*((rax + r12)) == 3) ? 1 : 0; 0x0041f3ce mov r13d, ebx | r13d = ebx; 0x0041f3d1 mov r15, rsi | r15 = rsi; 0x0041f3d4 jmp 0x41f4bf | goto label_22; | } 0x0041f3d9 mov eax, r12d | eax = r12d; 0x0041f3dc and eax, 0xf | eax &= 0xf; 0x0041f3df movzx eax, byte [rax + 0x44fe45] | eax = *((rax + str.0123456789ABCDEF)); 0x0041f3e6 mov byte [rdi + 0x20], al | *((rdi + 0x20)) = al; 0x0041f3e9 shr r12, 4 | r12 >>= 4; 0x0041f3ed movzx eax, byte [r12 + 0x44fe45] | eax = *((r12 + str.0123456789ABCDEF)); 0x0041f3f6 mov dword [rdi + 0x28], 2 | *((rdi + 0x28)) = 2; 0x0041f3fd mov byte [rdi + 0x21], al | *((rdi + 0x21)) = al; 0x0041f400 sub r13d, dword [rdi + 0x2c] | r13d -= *((rdi + 0x2c)); 0x0041f404 mov eax, dword [rdi + 4] | eax = *((rdi + 4)); 0x0041f407 add eax, 0xfffffffd | eax += 0xfffffffd; 0x0041f40a cmp r13d, eax | | if (r13d < eax) { 0x0041f40d jge 0x41f456 | 0x0041f40f mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f412 mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f415 inc ebx | ebx++; 0x0041f417 mov dword [rdi + 8], ebx | *((rdi + 8)) = ebx; 0x0041f41a jmp 0x41f48e | goto label_27; | label_26: 0x0041f41c mov dword [rdi + 0x28], 3 | *((rdi + 0x28)) = 3; 0x0041f423 mov byte [rdi + 0x22], 0x3d | *((rdi + 0x22)) = 0x3d; 0x0041f427 mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f42a inc dword [rdi + 8] | *((rdi + 8))++; 0x0041f42d movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f431 lea esi, [rax + 1] | esi = rax + 1; 0x0041f434 mov dword [rdi + 0x28], esi | *((rdi + 0x28)) = esi; 0x0041f437 mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f43c movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f440 lea esi, [rax + 1] | esi = rax + 1; 0x0041f443 mov dword [rdi + 0x28], esi | *((rdi + 0x28)) = esi; 0x0041f446 mov byte [rdi + rax + 0x20], 0xd | *((rdi + rax + 0x20)) = 0xd; 0x0041f44b mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f44e lea eax, [rbx + 2] | eax = rbx + 2; 0x0041f451 mov dword [rdi + 0x2c], eax | *((rdi + 0x2c)) = eax; 0x0041f454 jmp 0x41f491 | | } else { 0x0041f456 mov dword [rdi + 0x28], 3 | *((rdi + 0x28)) = 3; 0x0041f45d mov byte [rdi + 0x22], 0x3d | *((rdi + 0x22)) = 0x3d; 0x0041f461 mov byte [rsi], 0x3d | *(rsi) = 0x3d; 0x0041f464 inc dword [rdi + 8] | *((rdi + 8))++; 0x0041f467 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f46b lea esi, [rax + 1] | esi = rax + 1; 0x0041f46e mov dword [rdi + 0x28], esi | *((rdi + 0x28)) = esi; 0x0041f471 mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f476 movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f47a lea esi, [rax + 1] | esi = rax + 1; 0x0041f47d mov dword [rdi + 0x28], esi | *((rdi + 0x28)) = esi; 0x0041f480 mov byte [rdi + rax + 0x20], 0xd | *((rdi + rax + 0x20)) = 0xd; 0x0041f485 mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f488 lea eax, [rbx + 2] | eax = rbx + 2; 0x0041f48b mov dword [rdi + 0x2c], eax | *((rdi + 0x2c)) = eax; | label_27: 0x0041f48e inc r14 | r14++; | } | } 0x0041f491 mov byte [rdi + 0x31], 0 | *((rdi + 0x31)) = 0; 0x0041f495 jmp 0x41f4bc | goto label_28; | label_24: 0x0041f497 mov byte [rsi], 0xd | *(rsi) = 0xd; 0x0041f49a inc dword [rdi + 8] | *((rdi + 8))++; 0x0041f49d movsxd rax, dword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0041f4a1 lea esi, [rax + 1] | esi = rax + 1; 0x0041f4a4 mov dword [rdi + 0x28], esi | *((rdi + 0x28)) = esi; 0x0041f4a7 mov byte [rdi + rax + 0x20], 0xa | *((rdi + rax + 0x20)) = 0xa; 0x0041f4ac mov ebx, dword [rdi + 8] | ebx = *((rdi + 8)); 0x0041f4af lea eax, [rbx + 1] | eax = rbx + 1; | label_25: 0x0041f4b2 mov dword [rdi + 0x2c], eax | *((rdi + 0x2c)) = eax; 0x0041f4b5 mov byte [rdi + 0x31], 0 | *((rdi + 0x31)) = 0; 0x0041f4b9 inc r14 | r14++; | label_28: 0x0041f4bc mov r13d, ebx | r13d = ebx; | label_22: 0x0041f4bf cmp r14, r9 | | if (r14 >= r9) { 0x0041f4c2 jae 0x41eff3 | goto label_1; | } 0x0041f4c8 cmp r13d, r10d | | if (r13d == r10d) { 0x0041f4cb je 0x41eff3 | goto label_1; | } 0x0041f4d1 cmp byte [rdi + 0x30], 0 | 0x0041f4d5 mov rsi, r15 | rsi = r15; | if (*((rdi + 0x30)) == 0) { 0x0041f4d8 je 0x41f270 | goto label_2; | } 0x0041f4de jmp 0x41eff3 | goto label_1; | label_7: 0x0041f4e3 mov ebx, r10d | ebx = r10d; | label_10: 0x0041f4e6 sub ebx, r11d | ebx -= r11d; 0x0041f4e9 mov dword [rdx], ebx | *(rdx) = ebx; 0x0041f4eb sub r14d, r8d | r14d -= r8d; 0x0041f4ee mov dword [rcx], r14d | *(rcx) = r14d; 0x0041f4f1 jmp 0x41f4ff | goto label_29; | label_5: 0x0041f4f3 mov dword [rdx], 0 | *(rdx) = 0; 0x0041f4f9 mov dword [rcx], 0 | *(rcx) = 0; | label_29: 0x0041f4ff mov eax, 3 | eax = 3; 0x0041f504 cmp byte [rdi + 0x30], 0 | | if (*((rdi + 0x30)) == 0) { 0x0041f508 jne 0x41f50d | 0x0041f50a mov eax, dword [rdi + 0x28] | eax = *((rdi + 0x28)); | } | label_4: 0x0041f50d pop rbx | 0x0041f50e pop r12 | r12 = rbx; 0x0041f510 pop r13 | r13 = rbx; 0x0041f512 pop r14 | r14 = rbx; 0x0041f514 pop r15 | r15 = rbx; 0x0041f516 pop rbp | 0x0041f517 ret | return rax; | }