OPTION DOTNAME .text$ SEGMENT ALIGN(256) 'CODE' EXTERN OPENSSL_ia32cap_P:NEAR PUBLIC asm_RC4 ALIGN 16 asm_RC4 PROC PUBLIC mov QWORD PTR[8+rsp],rdi ;WIN64 prologue mov QWORD PTR[16+rsp],rsi mov rax,rsp $L$SEH_begin_asm_RC4:: mov rdi,rcx mov rsi,rdx mov rdx,r8 mov rcx,r9 or rsi,rsi jne $L$entry mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue mov rsi,QWORD PTR[16+rsp] DB 0F3h,0C3h ;repret $L$entry:: push rbx push r12 push r13 $L$prologue:: mov r11,rsi mov r12,rdx mov r13,rcx xor r10,r10 xor rcx,rcx lea rdi,QWORD PTR[8+rdi] mov r10b,BYTE PTR[((-8))+rdi] mov cl,BYTE PTR[((-4))+rdi] cmp DWORD PTR[256+rdi],-1 je $L$RC4_CHAR mov r8d,DWORD PTR[OPENSSL_ia32cap_P] xor rbx,rbx inc r10b sub rbx,r10 sub r13,r12 mov eax,DWORD PTR[r10*4+rdi] test r11,-16 jz $L$loop1 bt r8d,30 jc $L$intel and rbx,7 lea rsi,QWORD PTR[1+r10] jz $L$oop8 sub r11,rbx $L$oop8_warmup:: add cl,al mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax mov DWORD PTR[r10*4+rdi],edx add al,dl inc r10b mov edx,DWORD PTR[rax*4+rdi] mov eax,DWORD PTR[r10*4+rdi] xor dl,BYTE PTR[r12] mov BYTE PTR[r13*1+r12],dl lea r12,QWORD PTR[1+r12] dec rbx jnz $L$oop8_warmup lea rsi,QWORD PTR[1+r10] jmp $L$oop8 ALIGN 16 $L$oop8:: add cl,al mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax mov ebx,DWORD PTR[rsi*4+rdi] ror r8,8 mov DWORD PTR[r10*4+rdi],edx add dl,al mov r8b,BYTE PTR[rdx*4+rdi] add cl,bl mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx mov eax,DWORD PTR[4+rsi*4+rdi] ror r8,8 mov DWORD PTR[4+r10*4+rdi],edx add dl,bl mov r8b,BYTE PTR[rdx*4+rdi] add cl,al mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax mov ebx,DWORD PTR[8+rsi*4+rdi] ror r8,8 mov DWORD PTR[8+r10*4+rdi],edx add dl,al mov r8b,BYTE PTR[rdx*4+rdi] add cl,bl mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx mov eax,DWORD PTR[12+rsi*4+rdi] ror r8,8 mov DWORD PTR[12+r10*4+rdi],edx add dl,bl mov r8b,BYTE PTR[rdx*4+rdi] add cl,al mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax mov ebx,DWORD PTR[16+rsi*4+rdi] ror r8,8 mov DWORD PTR[16+r10*4+rdi],edx add dl,al mov r8b,BYTE PTR[rdx*4+rdi] add cl,bl mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx mov eax,DWORD PTR[20+rsi*4+rdi] ror r8,8 mov DWORD PTR[20+r10*4+rdi],edx add dl,bl mov r8b,BYTE PTR[rdx*4+rdi] add cl,al mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax mov ebx,DWORD PTR[24+rsi*4+rdi] ror r8,8 mov DWORD PTR[24+r10*4+rdi],edx add dl,al mov r8b,BYTE PTR[rdx*4+rdi] add sil,8 add cl,bl mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx mov eax,DWORD PTR[((-4))+rsi*4+rdi] ror r8,8 mov DWORD PTR[28+r10*4+rdi],edx add dl,bl mov r8b,BYTE PTR[rdx*4+rdi] add r10b,8 ror r8,8 sub r11,8 xor r8,QWORD PTR[r12] mov QWORD PTR[r13*1+r12],r8 lea r12,QWORD PTR[8+r12] test r11,-8 jnz $L$oop8 cmp r11,0 jne $L$loop1 jmp $L$exit ALIGN 16 $L$intel:: test r11,-32 jz $L$loop1 and rbx,15 jz $L$oop16_is_hot sub r11,rbx $L$oop16_warmup:: add cl,al mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax mov DWORD PTR[r10*4+rdi],edx add al,dl inc r10b mov edx,DWORD PTR[rax*4+rdi] mov eax,DWORD PTR[r10*4+rdi] xor dl,BYTE PTR[r12] mov BYTE PTR[r13*1+r12],dl lea r12,QWORD PTR[1+r12] dec rbx jnz $L$oop16_warmup mov rbx,rcx xor rcx,rcx mov cl,bl $L$oop16_is_hot:: lea rsi,QWORD PTR[r10*4+rdi] add cl,al mov edx,DWORD PTR[rcx*4+rdi] pxor xmm0,xmm0 mov DWORD PTR[rcx*4+rdi],eax add al,dl mov ebx,DWORD PTR[4+rsi] movzx eax,al mov DWORD PTR[rsi],edx add cl,bl pinsrw xmm0,WORD PTR[rax*4+rdi],0 jmp $L$oop16_enter ALIGN 16 $L$oop16:: add cl,al mov edx,DWORD PTR[rcx*4+rdi] pxor xmm2,xmm0 psllq xmm1,8 pxor xmm0,xmm0 mov DWORD PTR[rcx*4+rdi],eax add al,dl mov ebx,DWORD PTR[4+rsi] movzx eax,al mov DWORD PTR[rsi],edx pxor xmm2,xmm1 add cl,bl pinsrw xmm0,WORD PTR[rax*4+rdi],0 movdqu XMMWORD PTR[r13*1+r12],xmm2 lea r12,QWORD PTR[16+r12] $L$oop16_enter:: mov edx,DWORD PTR[rcx*4+rdi] pxor xmm1,xmm1 mov DWORD PTR[rcx*4+rdi],ebx add bl,dl mov eax,DWORD PTR[8+rsi] movzx ebx,bl mov DWORD PTR[4+rsi],edx add cl,al pinsrw xmm1,WORD PTR[rbx*4+rdi],0 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax add al,dl mov ebx,DWORD PTR[12+rsi] movzx eax,al mov DWORD PTR[8+rsi],edx add cl,bl pinsrw xmm0,WORD PTR[rax*4+rdi],1 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx add bl,dl mov eax,DWORD PTR[16+rsi] movzx ebx,bl mov DWORD PTR[12+rsi],edx add cl,al pinsrw xmm1,WORD PTR[rbx*4+rdi],1 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax add al,dl mov ebx,DWORD PTR[20+rsi] movzx eax,al mov DWORD PTR[16+rsi],edx add cl,bl pinsrw xmm0,WORD PTR[rax*4+rdi],2 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx add bl,dl mov eax,DWORD PTR[24+rsi] movzx ebx,bl mov DWORD PTR[20+rsi],edx add cl,al pinsrw xmm1,WORD PTR[rbx*4+rdi],2 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax add al,dl mov ebx,DWORD PTR[28+rsi] movzx eax,al mov DWORD PTR[24+rsi],edx add cl,bl pinsrw xmm0,WORD PTR[rax*4+rdi],3 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx add bl,dl mov eax,DWORD PTR[32+rsi] movzx ebx,bl mov DWORD PTR[28+rsi],edx add cl,al pinsrw xmm1,WORD PTR[rbx*4+rdi],3 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax add al,dl mov ebx,DWORD PTR[36+rsi] movzx eax,al mov DWORD PTR[32+rsi],edx add cl,bl pinsrw xmm0,WORD PTR[rax*4+rdi],4 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx add bl,dl mov eax,DWORD PTR[40+rsi] movzx ebx,bl mov DWORD PTR[36+rsi],edx add cl,al pinsrw xmm1,WORD PTR[rbx*4+rdi],4 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax add al,dl mov ebx,DWORD PTR[44+rsi] movzx eax,al mov DWORD PTR[40+rsi],edx add cl,bl pinsrw xmm0,WORD PTR[rax*4+rdi],5 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx add bl,dl mov eax,DWORD PTR[48+rsi] movzx ebx,bl mov DWORD PTR[44+rsi],edx add cl,al pinsrw xmm1,WORD PTR[rbx*4+rdi],5 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax add al,dl mov ebx,DWORD PTR[52+rsi] movzx eax,al mov DWORD PTR[48+rsi],edx add cl,bl pinsrw xmm0,WORD PTR[rax*4+rdi],6 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx add bl,dl mov eax,DWORD PTR[56+rsi] movzx ebx,bl mov DWORD PTR[52+rsi],edx add cl,al pinsrw xmm1,WORD PTR[rbx*4+rdi],6 mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax add al,dl mov ebx,DWORD PTR[60+rsi] movzx eax,al mov DWORD PTR[56+rsi],edx add cl,bl pinsrw xmm0,WORD PTR[rax*4+rdi],7 add r10b,16 movdqu xmm2,XMMWORD PTR[r12] mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],ebx add bl,dl movzx ebx,bl mov DWORD PTR[60+rsi],edx lea rsi,QWORD PTR[r10*4+rdi] pinsrw xmm1,WORD PTR[rbx*4+rdi],7 mov eax,DWORD PTR[rsi] mov rbx,rcx xor rcx,rcx sub r11,16 mov cl,bl test r11,-16 jnz $L$oop16 psllq xmm1,8 pxor xmm2,xmm0 pxor xmm2,xmm1 movdqu XMMWORD PTR[r13*1+r12],xmm2 lea r12,QWORD PTR[16+r12] cmp r11,0 jne $L$loop1 jmp $L$exit ALIGN 16 $L$loop1:: add cl,al mov edx,DWORD PTR[rcx*4+rdi] mov DWORD PTR[rcx*4+rdi],eax mov DWORD PTR[r10*4+rdi],edx add al,dl inc r10b mov edx,DWORD PTR[rax*4+rdi] mov eax,DWORD PTR[r10*4+rdi] xor dl,BYTE PTR[r12] mov BYTE PTR[r13*1+r12],dl lea r12,QWORD PTR[1+r12] dec r11 jnz $L$loop1 jmp $L$exit ALIGN 16 $L$RC4_CHAR:: add r10b,1 movzx eax,BYTE PTR[r10*1+rdi] test r11,-8 jz $L$cloop1 jmp $L$cloop8 ALIGN 16 $L$cloop8:: mov r8d,DWORD PTR[r12] mov r9d,DWORD PTR[4+r12] add cl,al lea rsi,QWORD PTR[1+r10] movzx edx,BYTE PTR[rcx*1+rdi] movzx esi,sil movzx ebx,BYTE PTR[rsi*1+rdi] mov BYTE PTR[rcx*1+rdi],al cmp rcx,rsi mov BYTE PTR[r10*1+rdi],dl jne $L$cmov0 mov rbx,rax $L$cmov0:: add dl,al xor r8b,BYTE PTR[rdx*1+rdi] ror r8d,8 add cl,bl lea r10,QWORD PTR[1+rsi] movzx edx,BYTE PTR[rcx*1+rdi] movzx r10d,r10b movzx eax,BYTE PTR[r10*1+rdi] mov BYTE PTR[rcx*1+rdi],bl cmp rcx,r10 mov BYTE PTR[rsi*1+rdi],dl jne $L$cmov1 mov rax,rbx $L$cmov1:: add dl,bl xor r8b,BYTE PTR[rdx*1+rdi] ror r8d,8 add cl,al lea rsi,QWORD PTR[1+r10] movzx edx,BYTE PTR[rcx*1+rdi] movzx esi,sil movzx ebx,BYTE PTR[rsi*1+rdi] mov BYTE PTR[rcx*1+rdi],al cmp rcx,rsi mov BYTE PTR[r10*1+rdi],dl jne $L$cmov2 mov rbx,rax $L$cmov2:: add dl,al xor r8b,BYTE PTR[rdx*1+rdi] ror r8d,8 add cl,bl lea r10,QWORD PTR[1+rsi] movzx edx,BYTE PTR[rcx*1+rdi] movzx r10d,r10b movzx eax,BYTE PTR[r10*1+rdi] mov BYTE PTR[rcx*1+rdi],bl cmp rcx,r10 mov BYTE PTR[rsi*1+rdi],dl jne $L$cmov3 mov rax,rbx $L$cmov3:: add dl,bl xor r8b,BYTE PTR[rdx*1+rdi] ror r8d,8 add cl,al lea rsi,QWORD PTR[1+r10] movzx edx,BYTE PTR[rcx*1+rdi] movzx esi,sil movzx ebx,BYTE PTR[rsi*1+rdi] mov BYTE PTR[rcx*1+rdi],al cmp rcx,rsi mov BYTE PTR[r10*1+rdi],dl jne $L$cmov4 mov rbx,rax $L$cmov4:: add dl,al xor r9b,BYTE PTR[rdx*1+rdi] ror r9d,8 add cl,bl lea r10,QWORD PTR[1+rsi] movzx edx,BYTE PTR[rcx*1+rdi] movzx r10d,r10b movzx eax,BYTE PTR[r10*1+rdi] mov BYTE PTR[rcx*1+rdi],bl cmp rcx,r10 mov BYTE PTR[rsi*1+rdi],dl jne $L$cmov5 mov rax,rbx $L$cmov5:: add dl,bl xor r9b,BYTE PTR[rdx*1+rdi] ror r9d,8 add cl,al lea rsi,QWORD PTR[1+r10] movzx edx,BYTE PTR[rcx*1+rdi] movzx esi,sil movzx ebx,BYTE PTR[rsi*1+rdi] mov BYTE PTR[rcx*1+rdi],al cmp rcx,rsi mov BYTE PTR[r10*1+rdi],dl jne $L$cmov6 mov rbx,rax $L$cmov6:: add dl,al xor r9b,BYTE PTR[rdx*1+rdi] ror r9d,8 add cl,bl lea r10,QWORD PTR[1+rsi] movzx edx,BYTE PTR[rcx*1+rdi] movzx r10d,r10b movzx eax,BYTE PTR[r10*1+rdi] mov BYTE PTR[rcx*1+rdi],bl cmp rcx,r10 mov BYTE PTR[rsi*1+rdi],dl jne $L$cmov7 mov rax,rbx $L$cmov7:: add dl,bl xor r9b,BYTE PTR[rdx*1+rdi] ror r9d,8 lea r11,QWORD PTR[((-8))+r11] mov DWORD PTR[r13],r8d lea r12,QWORD PTR[8+r12] mov DWORD PTR[4+r13],r9d lea r13,QWORD PTR[8+r13] test r11,-8 jnz $L$cloop8 cmp r11,0 jne $L$cloop1 jmp $L$exit ALIGN 16 $L$cloop1:: add cl,al movzx ecx,cl movzx edx,BYTE PTR[rcx*1+rdi] mov BYTE PTR[rcx*1+rdi],al mov BYTE PTR[r10*1+rdi],dl add dl,al add r10b,1 movzx edx,dl movzx r10d,r10b movzx edx,BYTE PTR[rdx*1+rdi] movzx eax,BYTE PTR[r10*1+rdi] xor dl,BYTE PTR[r12] lea r12,QWORD PTR[1+r12] mov BYTE PTR[r13],dl lea r13,QWORD PTR[1+r13] sub r11,1 jnz $L$cloop1 jmp $L$exit ALIGN 16 $L$exit:: sub r10b,1 mov DWORD PTR[((-8))+rdi],r10d mov DWORD PTR[((-4))+rdi],ecx mov r13,QWORD PTR[rsp] mov r12,QWORD PTR[8+rsp] mov rbx,QWORD PTR[16+rsp] add rsp,24 $L$epilogue:: mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue mov rsi,QWORD PTR[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_asm_RC4:: asm_RC4 ENDP PUBLIC asm_RC4_set_key ALIGN 16 asm_RC4_set_key PROC PUBLIC mov QWORD PTR[8+rsp],rdi ;WIN64 prologue mov QWORD PTR[16+rsp],rsi mov rax,rsp $L$SEH_begin_asm_RC4_set_key:: mov rdi,rcx mov rsi,rdx mov rdx,r8 lea rdi,QWORD PTR[8+rdi] lea rdx,QWORD PTR[rsi*1+rdx] neg rsi mov rcx,rsi xor eax,eax xor r9,r9 xor r10,r10 xor r11,r11 mov r8d,DWORD PTR[OPENSSL_ia32cap_P] bt r8d,20 jc $L$c1stloop jmp $L$w1stloop ALIGN 16 $L$w1stloop:: mov DWORD PTR[rax*4+rdi],eax add al,1 jnc $L$w1stloop xor r9,r9 xor r8,r8 ALIGN 16 $L$w2ndloop:: mov r10d,DWORD PTR[r9*4+rdi] add r8b,BYTE PTR[rsi*1+rdx] add r8b,r10b add rsi,1 mov r11d,DWORD PTR[r8*4+rdi] cmovz rsi,rcx mov DWORD PTR[r8*4+rdi],r10d mov DWORD PTR[r9*4+rdi],r11d add r9b,1 jnc $L$w2ndloop jmp $L$exit_key ALIGN 16 $L$c1stloop:: mov BYTE PTR[rax*1+rdi],al add al,1 jnc $L$c1stloop xor r9,r9 xor r8,r8 ALIGN 16 $L$c2ndloop:: mov r10b,BYTE PTR[r9*1+rdi] add r8b,BYTE PTR[rsi*1+rdx] add r8b,r10b add rsi,1 mov r11b,BYTE PTR[r8*1+rdi] jnz $L$cnowrap mov rsi,rcx $L$cnowrap:: mov BYTE PTR[r8*1+rdi],r10b mov BYTE PTR[r9*1+rdi],r11b add r9b,1 jnc $L$c2ndloop mov DWORD PTR[256+rdi],-1 ALIGN 16 $L$exit_key:: xor eax,eax mov DWORD PTR[((-8))+rdi],eax mov DWORD PTR[((-4))+rdi],eax mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue mov rsi,QWORD PTR[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_asm_RC4_set_key:: asm_RC4_set_key ENDP PUBLIC RC4_options ALIGN 16 RC4_options PROC PUBLIC lea rax,QWORD PTR[$L$opts] mov rdx,QWORD PTR[OPENSSL_ia32cap_P] mov edx,DWORD PTR[rdx] bt edx,20 jc $L$8xchar bt edx,30 jnc $L$done add rax,25 DB 0F3h,0C3h ;repret $L$8xchar:: add rax,12 $L$done:: DB 0F3h,0C3h ;repret ALIGN 64 $L$opts:: DB 114,99,52,40,56,120,44,105,110,116,41,0 DB 114,99,52,40,56,120,44,99,104,97,114,41,0 DB 114,99,52,40,49,54,120,44,105,110,116,41,0 DB 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32 DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 DB 62,0 ALIGN 64 RC4_options ENDP EXTERN __imp_RtlVirtualUnwind:NEAR ALIGN 16 stream_se_handler PROC PRIVATE push rsi push rdi push rbx push rbp push r12 push r13 push r14 push r15 pushfq sub rsp,64 mov rax,QWORD PTR[120+r8] mov rbx,QWORD PTR[248+r8] lea r10,QWORD PTR[$L$prologue] cmp rbx,r10 jb $L$in_prologue mov rax,QWORD PTR[152+r8] lea r10,QWORD PTR[$L$epilogue] cmp rbx,r10 jae $L$in_prologue lea rax,QWORD PTR[24+rax] mov rbx,QWORD PTR[((-8))+rax] mov r12,QWORD PTR[((-16))+rax] mov r13,QWORD PTR[((-24))+rax] mov QWORD PTR[144+r8],rbx mov QWORD PTR[216+r8],r12 mov QWORD PTR[224+r8],r13 $L$in_prologue:: mov rdi,QWORD PTR[8+rax] mov rsi,QWORD PTR[16+rax] mov QWORD PTR[152+r8],rax mov QWORD PTR[168+r8],rsi mov QWORD PTR[176+r8],rdi jmp $L$common_seh_exit stream_se_handler ENDP ALIGN 16 key_se_handler PROC PRIVATE push rsi push rdi push rbx push rbp push r12 push r13 push r14 push r15 pushfq sub rsp,64 mov rax,QWORD PTR[152+r8] mov rdi,QWORD PTR[8+rax] mov rsi,QWORD PTR[16+rax] mov QWORD PTR[168+r8],rsi mov QWORD PTR[176+r8],rdi $L$common_seh_exit:: mov rdi,QWORD PTR[40+r9] mov rsi,r8 mov ecx,154 DD 0a548f3fch mov rsi,r9 xor rcx,rcx mov rdx,QWORD PTR[8+rsi] mov r8,QWORD PTR[rsi] mov r9,QWORD PTR[16+rsi] mov r10,QWORD PTR[40+rsi] lea r11,QWORD PTR[56+rsi] lea r12,QWORD PTR[24+rsi] mov QWORD PTR[32+rsp],r10 mov QWORD PTR[40+rsp],r11 mov QWORD PTR[48+rsp],r12 mov QWORD PTR[56+rsp],rcx call QWORD PTR[__imp_RtlVirtualUnwind] mov eax,1 add rsp,64 popfq pop r15 pop r14 pop r13 pop r12 pop rbp pop rbx pop rdi pop rsi DB 0F3h,0C3h ;repret key_se_handler ENDP .text$ ENDS .pdata SEGMENT READONLY ALIGN(4) ALIGN 4 DD imagerel $L$SEH_begin_asm_RC4 DD imagerel $L$SEH_end_asm_RC4 DD imagerel $L$SEH_info_asm_RC4 DD imagerel $L$SEH_begin_asm_RC4_set_key DD imagerel $L$SEH_end_asm_RC4_set_key DD imagerel $L$SEH_info_asm_RC4_set_key .pdata ENDS .xdata SEGMENT READONLY ALIGN(8) ALIGN 8 $L$SEH_info_asm_RC4:: DB 9,0,0,0 DD imagerel stream_se_handler $L$SEH_info_asm_RC4_set_key:: DB 9,0,0,0 DD imagerel key_se_handler .xdata ENDS END