cx86unix.cpp

来自「一个用于点对点传输加密的工具包源码」· C++ 代码 · 共 1,024 行 · 第 1/2 页

CPP
1,024
字号
	movl	CAST_S_table2(,%eax,4),%ebx	addl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	xorl	%ebx,		%ecx	xorl	%ecx,		%edi	/* round 12 */	movl	96(%ebp),	%edx	movl	100(%ebp),	%ecx	addl	%edi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	xorl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	subl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	addl	%ebx,		%ecx	xorl	%ecx,		%esi.L001cast_dec_skip:	/* round 11 */	movl	88(%ebp),	%edx	movl	92(%ebp),	%ecx	subl	%esi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	addl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	xorl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	subl	%ebx,		%ecx	xorl	%ecx,		%edi	/* round 10 */	movl	80(%ebp),	%edx	movl	84(%ebp),	%ecx	xorl	%edi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	subl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	addl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	xorl	%ebx,		%ecx	xorl	%ecx,		%esi	/* round 9 */	movl	72(%ebp),	%edx	movl	76(%ebp),	%ecx	addl	%esi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	xorl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	subl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	addl	%ebx,		%ecx	xorl	%ecx,		%edi	/* round 8 */	movl	64(%ebp),	%edx	movl	68(%ebp),	%ecx	subl	%edi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	addl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	xorl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	subl	%ebx,		%ecx	xorl	%ecx,		%esi	/* round 7 */	movl	56(%ebp),	%edx	movl	60(%ebp),	%ecx	xorl	%esi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	subl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	addl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	xorl	%ebx,		%ecx	xorl	%ecx,		%edi	/* round 6 */	movl	48(%ebp),	%edx	movl	52(%ebp),	%ecx	addl	%edi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	xorl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	subl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	addl	%ebx,		%ecx	xorl	%ecx,		%esi	/* round 5 */	movl	40(%ebp),	%edx	movl	44(%ebp),	%ecx	subl	%esi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	addl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	xorl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	subl	%ebx,		%ecx	xorl	%ecx,		%edi	/* round 4 */	movl	32(%ebp),	%edx	movl	36(%ebp),	%ecx	xorl	%edi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	subl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	addl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	xorl	%ebx,		%ecx	xorl	%ecx,		%esi	/* round 3 */	movl	24(%ebp),	%edx	movl	28(%ebp),	%ecx	addl	%esi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	xorl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	subl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	addl	%ebx,		%ecx	xorl	%ecx,		%edi	/* round 2 */	movl	16(%ebp),	%edx	movl	20(%ebp),	%ecx	subl	%edi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	addl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	xorl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	subl	%ebx,		%ecx	xorl	%ecx,		%esi	/* round 1 */	movl	8(%ebp),	%edx	movl	12(%ebp),	%ecx	xorl	%esi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	subl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	addl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	xorl	%ebx,		%ecx	xorl	%ecx,		%edi	/* round 0 */	movl	(%ebp),		%edx	movl	4(%ebp),	%ecx	addl	%edi,		%edx	roll	%cl,		%edx	movl	%edx,		%ebx	xorl	%ecx,		%ecx	movb	%dh,		%cl	andl	$255,		%ebx	shrl	$16,		%edx	xorl	%eax,		%eax	movb	%dh,		%al	andl	$255,		%edx	movl	CAST_S_table0(,%ecx,4),%ecx	movl	CAST_S_table1(,%ebx,4),%ebx	xorl	%ebx,		%ecx	movl	CAST_S_table2(,%eax,4),%ebx	subl	%ebx,		%ecx	movl	CAST_S_table3(,%edx,4),%ebx	addl	%ebx,		%ecx	xorl	%ecx,		%esi	nop	movl	20(%esp),	%eax	movl	%edi,		4(%eax)	movl	%esi,		(%eax)	popl	%edi	popl	%esi	popl	%ebx	popl	%ebp	ret.CAST_decrypt_end:	SIZE(CAST_decrypt,.CAST_decrypt_end-CAST_decrypt).ident	"CAST_decrypt".text	.align ALIGN.globl CAST_cbc_encrypt	TYPE(CAST_cbc_encrypt,@function)CAST_cbc_encrypt:	pushl	%ebp	pushl	%ebx	pushl	%esi	pushl	%edi	movl	28(%esp),	%ebp	/* getting iv ptr from parameter 4 */	movl	36(%esp),	%ebx	movl	(%ebx),		%esi	movl	4(%ebx),	%edi	pushl	%edi	pushl	%esi	pushl	%edi	pushl	%esi	movl	%esp,		%ebx	movl	36(%esp),	%esi	movl	40(%esp),	%edi	/* getting encrypt flag from parameter 5 */	movl	56(%esp),	%ecx	/* get and push parameter 3 */	movl	48(%esp),	%eax	pushl	%eax	pushl	%ebx	cmpl	$0,		%ecx	jz	.L002decrypt	andl	$4294967288,	%ebp	movl	8(%esp),	%eax	movl	12(%esp),	%ebx	jz	.L003encrypt_finish.L004encrypt_loop:	movl	(%esi),		%ecx	movl	4(%esi),	%edx	xorl	%ecx,		%eax	xorl	%edx,		%ebx.byte 15.byte 200		/* bswapl  %eax */.byte 15.byte 203		/* bswapl  %ebx */	movl	%eax,		8(%esp)	movl	%ebx,		12(%esp)	call	CAST_encrypt	movl	8(%esp),	%eax	movl	12(%esp),	%ebx.byte 15.byte 200		/* bswapl  %eax */.byte 15.byte 203		/* bswapl  %ebx */	movl	%eax,		(%edi)	movl	%ebx,		4(%edi)	addl	$8,		%esi	addl	$8,		%edi	subl	$8,		%ebp	jnz	.L004encrypt_loop.L003encrypt_finish:	movl	52(%esp),	%ebp	andl	$7,		%ebp	jz	.L005finish	xorl	%ecx,		%ecx	xorl	%edx,		%edx	movl	.L006cbc_enc_jmp_table(,%ebp,4),%ebp	jmp	*%ebp.L007ej7:	xorl	%edx,		%edx	movb	6(%esi),	%dh	sall	$8,		%edx.L008ej6:	movb	5(%esi),	%dh.L009ej5:	movb	4(%esi),	%dl.L010ej4:	movl	(%esi),		%ecx	jmp	.L011ejend.L012ej3:	movb	2(%esi),	%ch	xorl	%ecx,		%ecx	sall	$8,		%ecx.L013ej2:	movb	1(%esi),	%ch.L014ej1:	movb	(%esi),		%cl.L011ejend:	xorl	%ecx,		%eax	xorl	%edx,		%ebx.byte 15.byte 200		/* bswapl  %eax */.byte 15.byte 203		/* bswapl  %ebx */	movl	%eax,		8(%esp)	movl	%ebx,		12(%esp)	call	CAST_encrypt	movl	8(%esp),	%eax	movl	12(%esp),	%ebx.byte 15.byte 200		/* bswapl  %eax */.byte 15.byte 203		/* bswapl  %ebx */	movl	%eax,		(%edi)	movl	%ebx,		4(%edi)	jmp	.L005finish.align ALIGN.L002decrypt:	andl	$4294967288,	%ebp	movl	16(%esp),	%eax	movl	20(%esp),	%ebx	jz	.L015decrypt_finish.L016decrypt_loop:	movl	(%esi),		%eax	movl	4(%esi),	%ebx.byte 15.byte 200		/* bswapl  %eax */.byte 15.byte 203		/* bswapl  %ebx */	movl	%eax,		8(%esp)	movl	%ebx,		12(%esp)	call	CAST_decrypt	movl	8(%esp),	%eax	movl	12(%esp),	%ebx.byte 15.byte 200		/* bswapl  %eax */.byte 15.byte 203		/* bswapl  %ebx */	movl	16(%esp),	%ecx	movl	20(%esp),	%edx	xorl	%eax,		%ecx	xorl	%ebx,		%edx	movl	(%esi),		%eax	movl	4(%esi),	%ebx	movl	%ecx,		(%edi)	movl	%edx,		4(%edi)	movl	%eax,		16(%esp)	movl	%ebx,		20(%esp)	addl	$8,		%esi	addl	$8,		%edi	subl	$8,		%ebp	jnz	.L016decrypt_loop.L015decrypt_finish:	movl	52(%esp),	%ebp	andl	$7,		%ebp	jz	.L005finish	movl	(%esi),		%eax	movl	4(%esi),	%ebx.byte 15.byte 200		/* bswapl  %eax */.byte 15.byte 203		/* bswapl  %ebx */	movl	%eax,		8(%esp)	movl	%ebx,		12(%esp)	call	CAST_decrypt	movl	8(%esp),	%eax	movl	12(%esp),	%ebx.byte 15.byte 200		/* bswapl  %eax */.byte 15.byte 203		/* bswapl  %ebx */	movl	16(%esp),	%ecx	movl	20(%esp),	%edx	xorl	%eax,		%ecx	xorl	%ebx,		%edx	movl	(%esi),		%eax	movl	4(%esi),	%ebx.L017dj7:	rorl	$16,		%edx	movb	%dl,		6(%edi)	shrl	$16,		%edx.L018dj6:	movb	%dh,		5(%edi).L019dj5:	movb	%dl,		4(%edi).L020dj4:	movl	%ecx,		(%edi)	jmp	.L021djend.L022dj3:	rorl	$16,		%ecx	movb	%cl,		2(%edi)	sall	$16,		%ecx.L023dj2:	movb	%ch,		1(%esi).L024dj1:	movb	%cl,		(%esi).L021djend:	jmp	.L005finish.align ALIGN.L005finish:	movl	60(%esp),	%ecx	addl	$24,		%esp	movl	%eax,		(%ecx)	movl	%ebx,		4(%ecx)	popl	%edi	popl	%esi	popl	%ebx	popl	%ebp	ret.align ALIGN.L006cbc_enc_jmp_table:	.long 0	.long .L014ej1	.long .L013ej2	.long .L012ej3	.long .L010ej4	.long .L009ej5	.long .L008ej6	.long .L007ej7.align ALIGN.L025cbc_dec_jmp_table:	.long 0	.long .L024dj1	.long .L023dj2	.long .L022dj3	.long .L020dj4	.long .L019dj5	.long .L018dj6	.long .L017dj7.L_CAST_cbc_encrypt_end:	SIZE(CAST_cbc_encrypt,.L_CAST_cbc_encrypt_end-CAST_cbc_encrypt).ident	"desasm.pl"

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?