[vlc-commits] Win32: use ld options rather than a perl script to set PE flags

Rafaël Carré git at videolan.org
Sat May 18 13:10:14 CEST 2013


vlc | branch: master | Rafaël Carré <funman at videolan.org> | Sat May 18 13:05:17 2013 +0200| [a42bb441656b14f088b61d7f86a77a3412f6d792] | committer: Rafaël Carré

Win32: use ld options rather than a perl script to set PE flags

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a42bb441656b14f088b61d7f86a77a3412f6d792
---

 Makefile.am                      |    1 -
 configure.ac                     |    3 ++
 extras/package/win32/package.mak |    3 --
 extras/package/win32/peflags.pl  |   72 --------------------------------------
 4 files changed, 3 insertions(+), 76 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index ff0f1f5..b9d59d1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -16,7 +16,6 @@ SUBDIRS += test
 EXTRA_DIST = \
 	extras/package/win32/vlc.exe.manifest \
 	extras/package/win32/libvlc.dll.manifest \
-	extras/package/win32/peflags.pl \
 	extras/package/win32/change-contribs-directory.sh \
 	extras/package/win32/configure.sh \
 	extras/package/symbian/configure.sh \
diff --git a/configure.ac b/configure.ac
index 567b01a..4a2b7f9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -227,6 +227,9 @@ case "${host_os}" in
     esac
 
     if test "${SYS}" = "mingw32"; then
+        # DEP, ASLR, NO SEH
+        LDFLAGS="${LDFLAGS} -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase"
+
         VLC_ADD_LIBS([libvlccore],[-lwinmm])
         VLC_ADD_LDFLAGS([vlc],[-mwindows])
         VLC_ADD_LIBS([win32text],[-lgdi32])
diff --git a/extras/package/win32/package.mak b/extras/package/win32/package.mak
index 8710e6f..796f30f 100644
--- a/extras/package/win32/package.mak
+++ b/extras/package/win32/package.mak
@@ -85,9 +85,6 @@ endif
 # Convert to DOS line endings
 	find $(win32_destdir) -type f \( -name "*xml" -or -name "*html" -or -name '*js' -or -name '*css' -or -name '*hosts' -or -iname '*txt' -or -name '*.cfg' -or -name '*.lua' \) -exec $(U2D) {} \;
 
-# Enable DEP and ASLR for all the binaries
-	find $(win32_destdir) -type f \( -name '*$(LIBEXT)' -print -o -name '*$(EXEEXT)' -print \) -exec $(top_srcdir)/extras/package/win32/peflags.pl {} \;
-
 # Remove cruft
 	find $(win32_destdir)/plugins/ -type f \( -name '*.a' -or -name '*.la' \) -exec rm -rvf {} \;
 
diff --git a/extras/package/win32/peflags.pl b/extras/package/win32/peflags.pl
deleted file mode 100755
index 62ae010..0000000
--- a/extras/package/win32/peflags.pl
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/perl
-# Copyright © 2011 Rafaël Carré <funman at videolanorg>
-#
-#  This program 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.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software
-#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
-#
-
-use warnings;
-
-if ($#ARGV < 0 || $#ARGV > 1 || ($#ARGV == 1 && $ARGV[0] ne "-AppContainer")) {
-    die "Usage: peflags.pl [-AppContainer] file";
-}
-my $appContainer = 0;
-my $file = $ARGV[0];
-if ($#ARGV == 1 && ($ARGV[0] eq "-AppContainer")) {
-    $appContainer = 1;
-    $file = $ARGV[1];
-}
-
-open F, "+<$file"
-    or die "Can't open `$file'";
-binmode F;
-
-seek F, 0x3c, 0;
-my $offset = get_le(4);
-seek F, $offset, 0;
-
-if (get_le(4) != 0x00004550) { # IMAGE_NT_SIGNATURE
-    die "Not a NT executable";
-}
-
-seek F, 20 + 70, 1;
-
-my $flags = get_le(2);
-seek F, -2, 1;
-
-$flags |= 0x40;   # Dynamic Base
-$flags |= 0x100;  # NX Compat
-$flags |= 0x400;  # NO SEH
-if ($appContainer) {
-    $flags |= 0x1000; # App Container
-}
-
-printf F "%c%c", $flags & 0xff,($flags >> 8) & 0xff;
-
-close F;
-
-sub get_le {
-    my $bytes;
-    read F, $bytes, $_[0];
-    if (length $bytes ne $_[0]) {
-        die "Couldn't read";
-    }
-
-    my $ret = 0;
-    my @array = split //, $bytes;
-    for (my $shift = 0, my $i = 0; $i < $_[0]; $i++, $shift += 8) {
-        $ret += (ord $array[$i]) << $shift;
-    }
-    return $ret;
-}



More information about the vlc-commits mailing list