Commit a42bb441 authored by Rafaël Carré's avatar Rafaël Carré

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

parent 72e343b3
......@@ -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 \
......
......@@ -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])
......
......@@ -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 {} \;
......
#!/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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment