⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unnrv2b.s

📁 linux下从网卡远程启动
💻 S
字号:
/*  * Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer * * This file is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * Originally this code was part of ucl the data compression library * for upx the ``Ultimate Packer of eXecutables''. * * - Converted to gas assembly, and refitted to work with etherboot. *   Eric Biederman 20 Aug 2002 */	.text	.globl	_start_start:	/* Save the initial register values */	pushal	/*	 * See where I am running, and compute %ebp	 */	call	1f1:	popl	%ebp	subl	$1b, %ebp	/* Setup to run the decompressor */	cld	leal	_payload+4(%ebp), %esi	/* The linker script defines payload */	leal	uncompressed(%ebp), %edi	movl	$-1, %ebp	/* last_m_off = -1 */	jmp	dcl1_n2b/* ------------- DECOMPRESSION ------------- Input:   %esi - source   %edi - dest   %ebp - -1   cld Output:   %eax - 0   %ecx - 0*/.macro getbit bits.if	\bits == 1	addl	%ebx, %ebx	jnz	1f.endif	movl	(%esi), %ebx	subl	$-4, %esi	/* sets carry flag */	adcl	%ebx, %ebx1:.endmdecompr_literals_n2b:	movsbdecompr_loop_n2b:	addl	%ebx, %ebx	jnz	dcl2_n2bdcl1_n2b:	getbit	32dcl2_n2b:	jc	decompr_literals_n2b	xorl	%eax, %eax	incl	%eax		/* m_off = 1 */loop1_n2b:	getbit	1	adcl	%eax, %eax	/* m_off = m_off*2 + getbit() */	getbit	1	jnc	loop1_n2b	/* while(!getbit()) */	xorl	%ecx, %ecx	subl	$3, %eax	jb	decompr_ebpeax_n2b	/* if (m_off == 2) goto decompr_ebpeax_n2b ? */	shll	$8, %eax		movb	(%esi), %al	/* m_off = (m_off - 3)*256 + src[ilen++] */	incl	%esi	xorl	$-1, %eax		jz	decompr_end_n2b	/* if (m_off == 0xffffffff) goto decomp_end_n2b */	movl	%eax, %ebp	/* last_m_off = m_off ?*/decompr_ebpeax_n2b:	getbit	1			adcl	%ecx, %ecx	/* m_len = getbit() */	getbit	1	adcl	%ecx, %ecx	/* m_len = m_len*2 + getbit()) */	jnz	decompr_got_mlen_n2b	/* if (m_len == 0) goto decompr_got_mlen_n2b */	incl	%ecx		/* m_len++ */loop2_n2b:	getbit	1		adcl	%ecx, %ecx	/* m_len = m_len*2 + getbit() */	getbit	1	jnc	loop2_n2b	/* while(!getbit()) */	incl	%ecx	incl	%ecx		/* m_len += 2 */decompr_got_mlen_n2b:	cmpl	$-0xd00, %ebp	adcl	$1, %ecx	/* m_len = m_len + 1 + (last_m_off > 0xd00) */	pushl	%esi	leal	(%edi,%ebp), %esi	/* m_pos = dst + olen + -m_off  */	rep	movsb			/* dst[olen++] = *m_pos++ while(m_len > 0) */	popl	%esi	jmp	decompr_loop_n2bdecompr_end_n2b:	/* Restore the initial register values */	popal	jmp	uncompressed.bss	.balign 16	/* uncompressed data will be written here */uncompressed:

⌨️ 快捷键说明

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