Blob
1 .globl _tas2 _tas:3 movl $0xCAFEBABE, %eax4 movl 4(%esp), %ecx5 xchgl %eax, 0(%ecx)6 ret8 .globl setmcontext9 setmcontext:10 movl 4(%esp), %edx11 movl 8(%edx), %fs12 movl 12(%edx), %es13 movl 16(%edx), %ds14 movl 76(%edx), %ss15 movl 20(%edx), %edi16 movl 24(%edx), %esi17 movl 28(%edx), %ebp18 movl %esp, %ecx19 movl 72(%edx), %esp20 pushl 60(%edx) /* eip */21 pushl 44(%edx) /* ecx */22 pushl 48(%edx) /* eax */23 movl 36(%edx), %ebx24 movl 40(%edx), %edx25 movl 12(%ecx), %eax26 popl %eax27 popl %ecx28 ret30 .globl getmcontext31 getmcontext:32 pushl %edx33 movl 8(%esp), %edx34 movl %fs, 8(%edx)35 movl %es, 12(%edx)36 movl %ds, 16(%edx)37 movl %ss, 76(%edx)38 movl %edi, 20(%edx)39 movl %esi, 24(%edx)40 movl %ebp, 28(%edx)41 movl %ebx, 36(%edx)42 movl $1, 48(%edx)43 popl %eax44 movl %eax, 40(%edx)45 movl %ecx, 44(%edx)46 movl (%esp), %eax /* eip */47 movl %eax, 60(%edx)48 movl %esp, %eax49 addl $4, %eax /* setmcontext will re-push the eip */50 movl %eax, 72(%edx)51 movl 40(%edx), %edx52 xorl %eax, %eax53 ret