Make it compile again by adding a more portable setfold.sh script.
committer: mfx <mfx> 962038500 +0000
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
*.upx
|
||||
upx
|
||||
upx.map
|
||||
@@ -0,0 +1,27 @@
|
||||
*.asx
|
||||
*.asy
|
||||
*.bin
|
||||
*.i
|
||||
*.lst
|
||||
*.map
|
||||
*.o
|
||||
l_com.h
|
||||
l_djgpp2.h
|
||||
l_exe.h
|
||||
l_le_n2b.h
|
||||
l_le_n2d.h
|
||||
l_lx_n2b.h
|
||||
l_lx_n2d.h
|
||||
l_sh_n2b.h
|
||||
l_sh_n2d.h
|
||||
l_sys.h
|
||||
l_tmt.h
|
||||
l_t_n2b.h
|
||||
l_t_n2bs.h
|
||||
l_t_n2d.h
|
||||
l_t_n2ds.h
|
||||
l_w32pe.h
|
||||
l_wcle.h
|
||||
stubify.h
|
||||
upxb
|
||||
upxd
|
||||
+30
-47
@@ -61,7 +61,7 @@ APP = perl -w scripts/app.pl
|
||||
BIN2H = perl -w scripts/bin2h.pl
|
||||
BRANDELF = perl -w scripts/brandelf.pl
|
||||
O2BIN = perl -w scripts/o2bin.pl
|
||||
SETFOLD = perl -w scripts/setfold.pl
|
||||
SETFOLD = /bin/sh scripts/setfold.sh
|
||||
##STRIPELF = perl -w scripts/stripelf.pl
|
||||
STRIPELF = ./util/sstrip/sstrip
|
||||
|
||||
@@ -95,14 +95,14 @@ mostlyclean:
|
||||
-rm -f *~ *.bin *.bkp *.i *.lst *.map
|
||||
|
||||
clean: mostlyclean
|
||||
-rm -f *.o *.asx *.asy upxb upxd
|
||||
-rm -f *.o *.asx *.asy
|
||||
|
||||
distclean: clean
|
||||
|
||||
# This command is intended for maintainers to use; it deletes files
|
||||
# that may require special tools to rebuild.
|
||||
maintainer-clean: distclean
|
||||
-rm -f $(STUBS)
|
||||
-rm -f $(STUBS) upxb upxd
|
||||
|
||||
ident: all
|
||||
ident *.bin
|
||||
@@ -188,12 +188,9 @@ l_w32pe.h: l_w32pe.asx
|
||||
|
||||
l_lx_n2b.h: l_lx_exec.c l_xe_n2b.o l_lx_exec86.lds Makefile
|
||||
$(CC_LINUX) -DNRV2B -o $T.o -c $<
|
||||
ld -T l_lx_exec86.lds -Map l_lx_n2b.map -o $T.bin \
|
||||
ld -T l_lx_exec86.lds -Map $T.map -o $T.bin \
|
||||
l_xe_n2b.o $T.o
|
||||
fold=`nm $T.bin | grep fold_begin | sed 's/.....\(...\).*/0x\1/'`; \
|
||||
objcopy -S -R .comment -R .note $T.bin; \
|
||||
$(SETFOLD) $T.bin $$fold
|
||||
$(STRIPELF) $T.bin
|
||||
$(SETFOLD) $T.bin
|
||||
$(BRANDELF) $T.bin
|
||||
$(BIN2H) $T.bin linux_i386exec_nrv2b_loader $@
|
||||
|
||||
@@ -201,10 +198,7 @@ l_le_n2b.h: l_lx_elf.c l_6e_n2b.o l_lx_elf86.lds
|
||||
$(CC_LINUX) -DNRV2B -o $T.o -c $<
|
||||
ld -T l_lx_elf86.lds -Map $T.map -o $T.bin \
|
||||
l_6e_n2b.o $T.o
|
||||
fold=`nm $T.bin | grep fold_begin | sed 's/.....\(...\).*/0x\1/'`; \
|
||||
objcopy -S -R .comment -R .note $T.bin; \
|
||||
$(SETFOLD) $T.bin $$fold
|
||||
$(STRIPELF) $T.bin
|
||||
$(SETFOLD) $T.bin
|
||||
$(BRANDELF) $T.bin
|
||||
$(BIN2H) $T.bin linux_i386elf_nrv2b_loader $@
|
||||
|
||||
@@ -212,10 +206,7 @@ l_sh_n2b.h: l_lx_sh.c l_6h_n2b.o l_lx_sh86.lds
|
||||
$(CC_LINUX) -DNRV2B -o $T.o -c $<
|
||||
ld -T l_lx_sh86.lds -Map $T.map -o $T.bin \
|
||||
l_6h_n2b.o $T.o
|
||||
fold=`nm $T.bin | grep fold_begin | sed 's/.....\(...\).*/0x\1/'`; \
|
||||
objcopy -S -R .comment -R .note $T.bin; \
|
||||
$(SETFOLD) $T.bin $$fold
|
||||
$(STRIPELF) $T.bin
|
||||
$(SETFOLD) $T.bin
|
||||
$(BRANDELF) $T.bin
|
||||
$(BIN2H) $T.bin linux_i386sh_nrv2b_loader $@
|
||||
|
||||
@@ -233,10 +224,7 @@ l_lx_n2d.h: l_lx_exec.c l_xe_n2d.o l_lx_exec86.lds
|
||||
$(CC_LINUX) -DNRV2D -o $T.o -c $<
|
||||
ld -T l_lx_exec86.lds -Map $T.map -o $T.bin \
|
||||
l_xe_n2d.o $T.o
|
||||
fold=`nm $T.bin | grep fold_begin | sed 's/.....\(...\).*/0x\1/'`; \
|
||||
objcopy -S -R .comment -R .note $T.bin; \
|
||||
$(SETFOLD) $T.bin $$fold
|
||||
$(STRIPELF) $T.bin
|
||||
$(SETFOLD) $T.bin
|
||||
$(BRANDELF) $T.bin
|
||||
$(BIN2H) $T.bin linux_i386exec_nrv2d_loader $@
|
||||
|
||||
@@ -244,10 +232,7 @@ l_le_n2d.h: l_lx_elf.c l_6e_n2d.o l_lx_elf86.lds
|
||||
$(CC_LINUX) -DNRV2D -o $T.o -c $<
|
||||
ld -T l_lx_elf86.lds -Map $T.map -o $T.bin \
|
||||
l_6e_n2d.o $T.o
|
||||
fold=`nm $T.bin | grep fold_begin | sed 's/.....\(...\).*/0x\1/'`; \
|
||||
objcopy -S -R .comment -R .note $T.bin; \
|
||||
$(SETFOLD) $T.bin $$fold
|
||||
$(STRIPELF) $T.bin
|
||||
$(SETFOLD) $T.bin
|
||||
$(BRANDELF) $T.bin
|
||||
$(BIN2H) $T.bin linux_i386elf_nrv2d_loader $@
|
||||
|
||||
@@ -255,10 +240,7 @@ l_sh_n2d.h: l_lx_sh.c l_6h_n2d.o l_lx_sh86.lds
|
||||
$(CC_LINUX) -DNRV2D -o $T.o -c $<
|
||||
ld -T l_lx_sh86.lds -Map $T.map -o $T.bin \
|
||||
l_6h_n2d.o $T.o
|
||||
fold=`nm $T.bin | grep fold_begin | sed 's/.....\(...\).*/0x\1/'`; \
|
||||
objcopy -S -R .comment -R .note $T.bin; \
|
||||
$(SETFOLD) $T.bin $$fold
|
||||
$(STRIPELF) $T.bin
|
||||
$(SETFOLD) $T.bin
|
||||
$(BRANDELF) $T.bin
|
||||
$(BIN2H) $T.bin linux_i386sh_nrv2d_loader $@
|
||||
|
||||
@@ -273,20 +255,21 @@ l_6h_n2d.o: l_lx_sh86.asm
|
||||
|
||||
l_lx_sep.o: l_lx_sep.c
|
||||
$(CC_LINUX) -c $<
|
||||
|
||||
|
||||
upxb: l_lx_sep.o l_lx_sep86.asm
|
||||
$(NASM) -i$(UCL_I386)/ -f elf -dNRV2B -o upxb.o l_lx_sep86.asm
|
||||
ld -T l_lx_sep86.lds -Map upxb.map -o upxb upxb.o l_lx_sep.o
|
||||
objcopy -S -R .comment -R .note upxb
|
||||
$(STRIPELF) upxb
|
||||
$(BRANDELF) upxb
|
||||
$(NASM) -i$(UCL_I386)/ -f elf -dNRV2B -o $T.o l_lx_sep86.asm
|
||||
ld -T l_lx_sep86.lds -Map $T.map -o $@ $T.o l_lx_sep.o
|
||||
objcopy -S -R .comment -R .note $@
|
||||
$(STRIPELF) $@
|
||||
$(BRANDELF) $@
|
||||
|
||||
upxd: l_lx_sep.o l_lx_sep86.asm
|
||||
$(NASM) -i$(UCL_I386)/ -f elf -dNRV2D -o upxd.o l_lx_sep86.asm
|
||||
ld -T l_lx_sep86.lds -Map upxd.map -o upxd upxd.o l_lx_sep.o
|
||||
objcopy -S -R .comment -R .note upxd
|
||||
$(STRIPELF) upxd
|
||||
$(BRANDELF) upxd
|
||||
$(NASM) -i$(UCL_I386)/ -f elf -dNRV2D -o $T.o l_lx_sep86.asm
|
||||
ld -T l_lx_sep86.lds -Map $T.map -o $@ $T.o l_lx_sep.o
|
||||
objcopy -S -R .comment -R .note $@
|
||||
$(STRIPELF) $@
|
||||
$(BRANDELF) $@
|
||||
|
||||
|
||||
# /***********************************************************************
|
||||
# // dependencies
|
||||
@@ -316,14 +299,14 @@ l_xe_n2d.o: n2d_d32.ash $(DEPS1)
|
||||
l_6e_n2d.o: n2d_d32.ash $(DEPS1)
|
||||
l_6h_n2d.o: n2d_d32.ash $(DEPS1)
|
||||
|
||||
l_lx_n2b.h: linux.hh
|
||||
l_lx_n2d.h: linux.hh
|
||||
l_le_n2b.h: linux.hh
|
||||
l_le_n2d.h: linux.hh
|
||||
l_sh_n2b.h: linux.hh
|
||||
l_sh_n2d.h: linux.hh
|
||||
upxb: linux.hh
|
||||
upxd: linux.hh
|
||||
l_lx_n2b.h: linux.hh
|
||||
l_lx_n2d.h: linux.hh
|
||||
l_le_n2b.h: linux.hh
|
||||
l_le_n2d.h: linux.hh
|
||||
l_sh_n2b.h: linux.hh
|
||||
l_sh_n2d.h: linux.hh
|
||||
upxb: linux.hh
|
||||
upxd: linux.hh
|
||||
|
||||
.NOEXPORT:
|
||||
|
||||
|
||||
+3
-3
@@ -270,7 +270,7 @@ do_xmap(int fdi, Elf32_Ehdr const *const ehdr, f_expand *const f_decompress,
|
||||
(char const *)ehdr);
|
||||
unsigned long base = (ET_DYN==ehdr->e_type) ? 0x40000000 : 0;
|
||||
int j;
|
||||
for (j=0; j < ehdr->e_phnum; ++phdr, ++j)
|
||||
for (j=0; j < ehdr->e_phnum; ++phdr, ++j)
|
||||
if (PT_PHDR==phdr->p_type) {
|
||||
a->a_un.a_val = phdr->p_vaddr;
|
||||
}
|
||||
@@ -340,7 +340,7 @@ ERR_LAB
|
||||
do_brk(haddr);
|
||||
}
|
||||
}
|
||||
if (close(fdi) != 0)
|
||||
if (close(fdi) != 0)
|
||||
err_exit(11);
|
||||
if (ET_DYN==ehdr->e_type) {
|
||||
return ehdr->e_entry + base;
|
||||
@@ -402,7 +402,7 @@ void *upx_main(
|
||||
// ----- Step 4: decompress blocks -----
|
||||
//
|
||||
|
||||
// Get Elf32_Ehdr. First set xo.size = size[0] = uncompressed size
|
||||
// Get Elf32_Ehdr. First set xo.size = size[0] = uncompressed size
|
||||
if (0!=xread(fdi, (void *)&xo, sizeof(xo))) {
|
||||
err_exit(15);
|
||||
}
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
The GNU bfd binary file descriptor package, part of the GNU binutils package,
|
||||
contains code to recognize an Elf file by looking at fields in the file header.
|
||||
Many programs (such as gdb, size, objdump, objcopy, strip and others) use bfd.
|
||||
Unfortunately, bfd has been overly strict. In releases binutils-2.9.1.0.4,
|
||||
binutils-2.9.1.0.23, binutils-2.9.5.0.0, gdb-4.17, and probably others,
|
||||
bfd does not recognize a file with zero in Elf32_Ehdr.e_shoff, .e_shentsize,
|
||||
or .e_shnum, even though the operating system kernel does not care, and many
|
||||
bfd clients would work just fine in these cases.
|
||||
|
||||
Because of its desire to create small size compressed executables, UPX
|
||||
generates and uses Elf files with zero in .e_shoff, .e_shentsizes, and .e_shnum.
|
||||
As a result, many widely-distributed instances of gdb, size, objdump, etc.,
|
||||
refuse to work on UPX-packed executables.
|
||||
|
||||
Here is a patch to bfd/elfcode.h which enables many bfd clients to work
|
||||
with UPX-packed executables. The last two lines of the patch are
|
||||
if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
|
||||
return -1;
|
||||
|
||||
|
||||
--- elfcode.h.orig Mon Jun 16 11:45:32 1997
|
||||
+++ elfcode.h Sat Apr 22 10:18:56 2000
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ELF executable support for BFD.
|
||||
- Copyright 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
|
||||
+ Copyright 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
|
||||
|
||||
Written by Fred Fish @ Cygnus Support, from information published
|
||||
in "UNIX System V Release 4, Programmers Guide: ANSI C and
|
||||
@@ -517,14 +517,14 @@
|
||||
elf_debug_file (i_ehdrp);
|
||||
#endif
|
||||
|
||||
- /* If there is no section header table, we're hosed. */
|
||||
- if (i_ehdrp->e_shoff == 0)
|
||||
+ /* If there is no section header table, and relocatable, then we're hosed. */
|
||||
+ if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_type == ET_REL)
|
||||
goto got_wrong_format_error;
|
||||
|
||||
/* As a simple sanity check, verify that the what BFD thinks is the
|
||||
size of each section header table entry actually matches the size
|
||||
- recorded in the file. */
|
||||
- if (i_ehdrp->e_shentsize != sizeof (x_shdr))
|
||||
+ recorded in the file, but only if there are any sections. */
|
||||
+ if (i_ehdrp->e_shentsize != sizeof (x_shdr) && i_ehdrp->e_shnum != 0)
|
||||
goto got_wrong_format_error;
|
||||
|
||||
ebd = get_elf_backend_data (abfd);
|
||||
@@ -579,6 +579,7 @@
|
||||
/* Allocate space for a copy of the section header table in
|
||||
internal form, seek to the section header table in the file,
|
||||
read it in, and convert it to internal form. */
|
||||
+ if (i_ehdrp->e_shnum!=0) {
|
||||
i_shdrp = ((Elf_Internal_Shdr *)
|
||||
bfd_alloc (abfd, sizeof (*i_shdrp) * i_ehdrp->e_shnum));
|
||||
elf_elfsections (abfd) = ((Elf_Internal_Shdr **)
|
||||
@@ -609,6 +610,7 @@
|
||||
if (! bfd_section_from_shdr (abfd, i_ehdrp->e_shstrndx))
|
||||
goto got_no_match;
|
||||
}
|
||||
+ }
|
||||
|
||||
/* Read in the program headers. */
|
||||
if (i_ehdrp->e_phnum == 0)
|
||||
@@ -644,6 +646,7 @@
|
||||
bfd_section_from_shdr with it (since this particular strtab is
|
||||
used to find all of the ELF section names.) */
|
||||
|
||||
+ if (i_ehdrp->e_shstrndx != 0) {
|
||||
shstrtab = bfd_elf_get_str_section (abfd, i_ehdrp->e_shstrndx);
|
||||
if (!shstrtab)
|
||||
goto got_no_match;
|
||||
@@ -657,6 +660,7 @@
|
||||
if (! bfd_section_from_shdr (abfd, shindex))
|
||||
goto got_no_match;
|
||||
}
|
||||
+ }
|
||||
|
||||
/* Let the backend double check the format and override global
|
||||
information. */
|
||||
@@ -930,7 +934,7 @@
|
||||
{
|
||||
Elf_Internal_Shdr *hdr;
|
||||
Elf_Internal_Shdr *verhdr;
|
||||
- long symcount; /* Number of external ELF symbols */
|
||||
+ unsigned long symcount; /* Number of external ELF symbols */
|
||||
elf_symbol_type *sym; /* Pointer to current bfd symbol */
|
||||
elf_symbol_type *symbase; /* Buffer for generated bfd symbols */
|
||||
Elf_Internal_Sym i_sym;
|
||||
@@ -978,7 +982,7 @@
|
||||
sym = symbase = NULL;
|
||||
else
|
||||
{
|
||||
- long i;
|
||||
+ unsigned long i;
|
||||
|
||||
if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
|
||||
return -1;
|
||||
@@ -29,7 +29,11 @@ $fname = shift || die;
|
||||
sysopen (FH,$fname,2) || die;
|
||||
binmode FH;
|
||||
|
||||
$val = oct shift || die;
|
||||
$val = shift || die "$val";
|
||||
###print STDERR "$val\n";
|
||||
$val = oct($val); # acutally hex()
|
||||
###print STDERR "$val\n";
|
||||
die unless $val;
|
||||
$num = pack("V", $val);
|
||||
|
||||
# 0x34 = sizeof(Elf32_Ehdr)
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
file="$1"
|
||||
|
||||
# get directory of this script
|
||||
bindir=`echo "$0" | sed -e 's|[^/][^/]*$||'`
|
||||
bindir=`cd "$bindir" && pwd`
|
||||
|
||||
sstrip="$bindir/../util/sstrip/sstrip"
|
||||
|
||||
# get address of symbol "fold_begin"
|
||||
fold=`nm -f bsd "$file" | grep fold_begin | sed 's/^0*\([0-9a-fA-F]*\).*/0x\1/'`
|
||||
|
||||
# strip
|
||||
objcopy -S -R .comment -R .note "$file"
|
||||
"$sstrip" "$file"
|
||||
|
||||
# patch address
|
||||
perl -w "$bindir/setfold.pl" "$file" "$fold"
|
||||
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user