1
0
mirror of https://github.com/upx/upx synced 2025-09-28 19:06:07 +08:00

More lzma updates - win32/pe + lzma seems to work.

This commit is contained in:
Markus F.X.J. Oberhumer 2006-06-19 22:08:06 +02:00
parent 28f019d672
commit 0b685d11c9
14 changed files with 3825 additions and 3826 deletions

View File

@ -214,14 +214,14 @@ void Packer::patchDecompressor(void *loader, int lsize)
{
const lzma_compress_result_t *res = &ph.compress_result.result_lzma;
// FIXME - this is for i386 only
patch_le32(loader, lsize, "UPXd", ph.c_len - 1);
patch_le32(loader, lsize, "UPXc", ph.u_len);
unsigned p = // lc, lp, pb, dummy
unsigned properties = // lc, lp, pb, dummy
(res->lit_context_bits << 0) |
(res->lit_pos_bits << 8) |
(res->pos_bits << 16);
patch_le32(loader, lsize, "UPXb", p);
unsigned stack = 8 + 8 + 2 * res->num_probs;
patch_le32(loader, lsize, "UPXd", properties);
patch_le32(loader, lsize, "UPXc", ph.c_len - 1);
patch_le32(loader, lsize, "UPXb", ph.u_len);
unsigned stack = 8 + 4 + ALIGN_UP(2 * res->num_probs, 4);
stack = ALIGN_UP(stack, 16);
patch_le32(loader, lsize, "UPXa", 0u - stack);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -22,12 +22,14 @@ lzma_d_cs.ash : tc_list = i386-lzma i386-linux.elf i386 default
tc.i386-lzma.gcc = $(tc.i386-linux.elf.gcc)
tc.i386-lzma.gcc += -ffunction-sections
tc.i386-lzma.gcc += -I$(UPX_LZMADIR)
tc.i386-lzma.objdump = objdump
lzma_d_c%.ash : lzma_d_c.c
$(call tc,gcc) $(PP_FLAGS) -c $< -o tmp/$T.o
$(call tc,objstrip) tmp/$T.o
$(call tc,objcopy) --only-section .text.LzmaDecode -O binary tmp/$T.o tmp/$T.bin
head -c-1 tmp/$T.bin > tmp/$T.out
$(call tc,objdump) -b binary -m i386 -D tmp/$T.out > tmp/$T.out.lst
$(call tc,bin2h) --mode=nasm tmp/$T.out $@
lzma_d_cf.ash : PP_FLAGS = -DFAST

View File

@ -52,7 +52,7 @@
; init
; __LZMA_DEC00__
;
mov ebp, esp ; save stack
lea ecx, [esp + 'UPXa']
@ -62,22 +62,20 @@
cmp esp, ecx
jnz .clearstack1
inc esi
; LzmaDecodeProperties()
inc esi
lea edx, [ecx + 8]
mov dword [edx], 'UPXb' ; lc, lp, pb, dummy
lea eax, [ecx + 16]
mov dword [edx+4], eax ; Probs
push ecx ; outSizeProcessed *
push 'UPXc' ; outSize
push ecx ; &outSizeProcessed
push 'UPXb' ; outSize
push edi ; out
lea eax, [ecx + 4]
push eax ; inSizeProcessed *
push 'UPXd' ; inSize
add ecx, 4
push ecx ; &inSizeProcessed
push 'UPXc' ; inSize
push esi ; in
push edx ; CLzmaDecoderState *
add ecx, 4
push ecx ; &CLzmaDecoderState
push eax ; dummy for call
mov dword [ecx], 'UPXd' ; lc, lp, pb, dummy
; __LZMA_DEC10__
@ -92,19 +90,18 @@
; __LZMA_DEC30__
;
add esi, [esp + 12]
add edi, [esp + 24]
mov esp, ebp ; restore stack
add esi, [esp + 32 + 4]
add edi, [esp + 32 + 0]
xor eax, eax
lea ecx, [esp - 1024]
mov esp, ebp ; restore stack
.clearstack2:
push eax
cmp esp, ecx
jnz .clearstack2
mov esp, ebp ; restore stack
mov esp, ebp ; restore stack
xor ecx, ecx

View File

@ -53,9 +53,10 @@ ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(CLzmaDecoderState) == 16)
#undef LzmaDecode
typedef struct {
struct { unsigned char lc, lp, pb, dummy; } Properties;
CProb *Probs;
CProb Probs[];
// CProb *Probs;
} CLzmaDecoderState;
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(CLzmaDecoderState) == 8)
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(CLzmaDecoderState) == 4)
#define CLzmaDecoderState const CLzmaDecoderState
#include "C/7zip/Compress/LZMA_C/LzmaDecode.c"

View File

@ -1,6 +1,6 @@
db 85, 87, 86, 83,131,236,124,139,148, 36,144, 0, 0, 0,199, 68 ; 0x0000
db 36,116, 0, 0, 0, 0,198, 68, 36,115, 0,139,172, 36,156, 0 ; 0x0010
db 0, 0,139, 66, 4,137, 68, 36,120,184, 1, 0, 0, 0, 15,182 ; 0x0020
db 0, 0,141, 66, 4,137, 68, 36,120,184, 1, 0, 0, 0, 15,182 ; 0x0020
db 74, 2,137,195,211,227,137,217, 73,137, 76, 36,108, 15,182, 74 ; 0x0030
db 1,211,224, 72,137, 68, 36,104,139,132, 36,168, 0, 0, 0, 15 ; 0x0040
db 182, 50,199, 69, 0, 0, 0, 0, 0,199, 68, 36, 96, 0, 0, 0 ; 0x0050

View File

@ -1,6 +1,6 @@
db 85, 87, 86, 83,131,236,124,139,148, 36,144, 0, 0, 0,199, 68 ; 0x0000
db 36,116, 0, 0, 0, 0,198, 68, 36,115, 0,139,172, 36,156, 0 ; 0x0010
db 0, 0,139, 66, 4,137, 68, 36,120,184, 1, 0, 0, 0, 15,182 ; 0x0020
db 0, 0,141, 66, 4,137, 68, 36,120,184, 1, 0, 0, 0, 15,182 ; 0x0020
db 74, 2,137,195,211,227,137,217, 73,137, 76, 36,108, 15,182, 74 ; 0x0030
db 1,211,224, 72,137, 68, 36,104,139,132, 36,168, 0, 0, 0, 15 ; 0x0040
db 182, 50,199, 69, 0, 0, 0, 0, 0,199, 68, 36, 96, 0, 0, 0 ; 0x0050

View File

@ -375,6 +375,8 @@ bool set_method_name(char *buf, size_t size, int method, int level)
alg = "NRV2D";
else if (M_IS_NRV2E(method))
alg = "NRV2E";
else if (M_IS_LZMA(method))
alg = "LZMA";
else
{
alg = "???";