Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- xdata SEGMENT
- $unwind$_cutdirs DD 060c01H
- DD 0e008320cH
- DD 07004c006H
- DD 050026003H
- $chain$2$_cutdirs DD 061b21H
- DD 0a341bH
- DD 0df410H
- DD 0cd405H
- DD imagerel _cutdirs
- DD imagerel _cutdirs+45
- DD imagerel $unwind$_cutdirs
- $chain$3$_cutdirs DD 021H
- DD imagerel _cutdirs
- DD imagerel _cutdirs+45
- DD imagerel $unwind$_cutdirs
- ; Function compile flags: /Ogtpy
- xdata ENDS
- _TEXT SEGMENT
- dest$ = 80
- seg$ = 88
- destlen$ = 88
- destsize$ = 96
- src$ = 104
- len$ = 112
- _cutdirs PROC
- ; 502 : {
- push rbp
- push rsi
- push rdi
- push r12
- push r14
- sub rsp, 32 ; 00000020H
- ; 503 : Py_ssize_t i = 0, spaceleft = maxstorepathlen - 40 + 1;
- xor edi, edi
- mov r12, rcx
- ; 504 : char seg[8];
- ; 505 : int seglen = 0;
- ; 506 : uint32_t cmp;
- ; 507 :
- ; 508 : while (i < len && spaceleft > 0) {
- mov rcx, QWORD PTR len$[rsp]
- mov rsi, rdx
- xor r8d, r8d
- xor edx, edx
- mov r14, r9
- lea ebp, QWORD PTR [rdi+81]
- test rcx, rcx
- jle $LN27@cutdirs
- mov QWORD PTR [rsp+96], r13
- movzx r13d, BYTE PTR seg$[rsp+2]
- mov QWORD PTR [rsp+104], r15
- movzx r15d, BYTE PTR seg$[rsp+1]
- mov QWORD PTR [rsp+80], rbx
- lea r9, OFFSET FLAT:encchar
- npad 1
- $LL15@cutdirs:
- test rbp, rbp
- jle $LN28@cutdirs
- ; 509 : if (src[i] == '/' || src[i] == '\0') {
- movzx eax, BYTE PTR [rdi+r14]
- cmp al, 47 ; 0000002fH
- je SHORT $LN12@cutdirs
- test al, al
- je SHORT $LN12@cutdirs
- ; 531 : }
- ; 532 : else if (seglen == sizeof(seg)) {
- cmp r8d, 8
- jne SHORT $LN2@cutdirs
- ; 533 : i++;
- inc rdi
- ; 534 : }
- ; 535 : else {
- jmp $LN1@cutdirs
- $LN2@cutdirs:
- ; 536 : seg[seglen++] = encodechar(src[i++]);
- movzx eax, al
- inc rdx
- inc r8d
- movzx eax, BYTE PTR [rax+r9]
- inc rdi
- ; 537 : spaceleft--;
- dec rbp
- mov BYTE PTR seg$[rsp+rdx-1], al
- mov r13b, BYTE PTR seg$[rsp+2]
- mov r15b, BYTE PTR seg$[rsp+1]
- jmp $LN1@cutdirs
- $LN12@cutdirs:
- ; 510 : if (seglen != 0) {
- test r8d, r8d
- je $LN11@cutdirs
- ; 511 : if (seglen == 3) {
- cmp r8d, 3
- jne SHORT $LN10@cutdirs
- ; 512 : cmp = seg[0] << 16 | seg[1] << 8 | seg[2];
- movsx ecx, BYTE PTR seg$[rsp]
- movsx eax, r15b
- shl ecx, 8
- or ecx, eax
- movsx eax, r13b
- shl ecx, 8
- or ecx, eax
- ; 513 : if ( cmp == 0x617578 /* aux */
- ; 514 : || cmp == 0x636f6e /* con */
- ; 515 : || cmp == 0x70726e /* prn */
- ; 516 : || cmp == 0x6e756c /* nul */)
- cmp ecx, 6387064 ; 00617578H
- je SHORT $LN8@cutdirs
- cmp ecx, 6516590 ; 00636f6eH
- je SHORT $LN8@cutdirs
- cmp ecx, 7369326 ; 0070726eH
- je SHORT $LN8@cutdirs
- cmp ecx, 7239020 ; 006e756cH
- jne SHORT $LN5@cutdirs
- $LN8@cutdirs:
- ; 517 : seg[2] = '~';
- mov r13b, 126 ; 0000007eH
- mov BYTE PTR seg$[rsp+2], r13b
- ; 518 : }
- ; 519 : else if (seglen == 4 && seg[3] <= '9'
- jmp SHORT $LN5@cutdirs
- $LN10@cutdirs:
- ; 520 : && seg[3] >= '0') {
- cmp r8d, 4
- jne SHORT $LN5@cutdirs
- movzx eax, BYTE PTR seg$[rsp+3]
- sub al, 48 ; 00000030H
- cmp al, 9
- ja SHORT $LN5@cutdirs
- ; 521 : cmp = seg[0] << 16 | seg[1] << 8 | seg[2];
- movsx ecx, BYTE PTR seg$[rsp]
- movsx eax, r15b
- shl ecx, 8
- or ecx, eax
- movsx eax, r13b
- shl ecx, 8
- or ecx, eax
- ; 522 : if ( cmp == 0x636f6d /* com0..9 */
- ; 523 : || cmp == 0x6c7074 /* lpt0..9 */)
- cmp ecx, 6516589 ; 00636f6dH
- je SHORT $LN4@cutdirs
- cmp ecx, 7106676 ; 006c7074H
- jne SHORT $LN5@cutdirs
- $LN4@cutdirs:
- ; 524 : seg[3] = '~';
- mov BYTE PTR seg$[rsp+3], 126 ; 0000007eH
- $LN5@cutdirs:
- ; 525 : }
- ; 526 : memcopy(dest, &destlen, destsize, &seg, seglen);
- movsxd rbx, r8d
- test r12, r12
- je SHORT $LN18@cutdirs
- lea rcx, QWORD PTR [r12+rsi]
- lea rdx, QWORD PTR seg$[rsp]
- mov r8, rbx
- call memcpy
- lea r9, OFFSET FLAT:encchar
- $LN18@cutdirs:
- mov rcx, QWORD PTR len$[rsp]
- add rsi, rbx
- ; 527 : seglen = 0;
- xor r8d, r8d
- xor edx, edx
- $LN11@cutdirs:
- ; 528 : }
- ; 529 : charcopy(dest, &destlen, destsize, src[i++]);
- test r12, r12
- je SHORT $LN21@cutdirs
- movzx eax, BYTE PTR [rdi+r14]
- mov BYTE PTR [r12+rsi], al
- $LN21@cutdirs:
- inc rsi
- inc rdi
- ; 530 : spaceleft--;
- dec rbp
- $LN1@cutdirs:
- ; 504 : char seg[8];
- ; 505 : int seglen = 0;
- ; 506 : uint32_t cmp;
- ; 507 :
- ; 508 : while (i < len && spaceleft > 0) {
- cmp rdi, rcx
- jl $LL15@cutdirs
- $LN28@cutdirs:
- mov rbx, QWORD PTR [rsp+80]
- mov r13, QWORD PTR [rsp+96]
- mov r15, QWORD PTR [rsp+104]
- ; 538 : }
- ; 539 : }
- ; 540 :
- ; 541 : return destlen;
- mov rax, rsi
- ; 542 : }
- add rsp, 32 ; 00000020H
- pop r14
- pop r12
- pop rdi
- pop rsi
- pop rbp
- ret 0
- $LN27@cutdirs:
- ; 538 : }
- ; 539 : }
- ; 540 :
- ; 541 : return destlen;
- mov rax, rsi
- ; 542 : }
- add rsp, 32 ; 00000020H
- pop r14
- pop r12
- pop rdi
- pop rsi
- pop rbp
- ret 0
- _cutdirs ENDP
- _TEXT ENDS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement