.text .align 4 .globl decompress decompress: push %ebp mov %esp,%ebp sub $0x14,%esp push %ebx push %esi push %edi movb $0x0,0xfffffffc(%ebp) movb $0x0,0xfffffff0(%ebp) mov 0x10(%ebp),%eax sub $0x2,%eax mov %eax,0xffffffec(%ebp) movb $0x0,0xfffffff4(%ebp) movl $0x0,0xfffffff8(%ebp) jmp .Q2 .Q1: mov 0xfffffff8(%ebp),%ecx add $0x1,%ecx mov %ecx,0xfffffff8(%ebp) .Q2: mov 0xfffffff8(%ebp),%edx cmp 0x14(%ebp),%edx jae .Q11 mov 0x8(%ebp),%eax xor %ecx,%ecx mov (%eax),%cl shl %ecx mov 0xc(%ebp),%edx mov %cl,(%edx) mov 0xc(%ebp),%eax add $0x1,%eax mov %eax,0xc(%ebp) mov 0x8(%ebp),%ecx add $0x1,%ecx mov %ecx,0x8(%ebp) mov 0x8(%ebp),%edx xor %eax,%eax mov (%edx),%al shl %eax mov 0xc(%ebp),%ecx mov %al,(%ecx) mov 0xc(%ebp),%edx add $0x1,%edx mov %edx,0xc(%ebp) mov 0x8(%ebp),%eax add $0x1,%eax mov %eax,0x8(%ebp) mov 0x8(%ebp),%ebx mov 0xc(%ebp),%esi mov 0xffffffec(%ebp),%ecx xor %eax,%eax mov (%ebx),%al mov 0x1(%ebx),%ah add $0x2,%ebx movb $0x0,0xfffffff0(%ebp) .Q3: push %ecx mov $0x0,%ecx mov $0x0,%edi .Q4: cmpb $0x10,0xfffffff0(%ebp) jne .Q5 movb $0x0,0xfffffff0(%ebp) mov (%ebx),%ax add $0x2,%ebx .Q5: inc %edi incb 0xfffffff0(%ebp) shl %ecx inc %ecx shr %ax jb .Q4 shr %ecx dec %edi push %edi mov $0x0,%edx cmp $0x0,%edi jne .Q6 pop %edi jmp .Q8 .Q6: cmpb $0x10,0xfffffff0(%ebp) jne .Q7 movb $0x0,0xfffffff0(%ebp) mov (%ebx),%ax add $0x2,%ebx .Q7: shr %ax rcr %dl incb 0xfffffff0(%ebp) dec %edi jne .Q6 pop %edi push %ecx mov %edi,%ecx rol %cl,%dl pop %ecx dec %di bt %di,%dx jb .Q9 .Q8: mov %cl,%dh sub %dl,%dh shl %dh mov 0xfffffffe(%esi),%dl sub %dh,%dl jmp .Q10 .Q9: shl %dl add 0xfffffffe(%esi),%dl .Q10: mov %dl,(%esi) inc %esi pop %ecx loop .Q3 mov %ebx,0x8(%ebp) mov %esi,0xc(%ebp) jmp .Q1 .Q11: mov $0x1,%eax pop %edi pop %esi pop %ebx mov %ebp,%esp pop %ebp ret