diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-28 19:13:38 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-28 19:13:38 +0000 |
commit | 1d106cd23824c024f631140e52666ca750f5f56d (patch) | |
tree | 7b10446fa7092647244f72c1f7af5b6f83722aa8 /tools/checkbins | |
parent | 832d0211871f2bf86f5cc99059c7ccd378086d03 (diff) | |
download | chromium_src-1d106cd23824c024f631140e52666ca750f5f56d.zip chromium_src-1d106cd23824c024f631140e52666ca750f5f56d.tar.gz chromium_src-1d106cd23824c024f631140e52666ca750f5f56d.tar.bz2 |
Rename checkbin to checkbins (because it checks multiple binaries) and set svn properties.
TBR=maruel
BUG=25952
Review URL: http://codereview.chromium.org/345015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30372 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/checkbins')
-rwxr-xr-x | tools/checkbins/checkbins.bat | 4 | ||||
-rwxr-xr-x | tools/checkbins/checkbins.py | 65 | ||||
-rwxr-xr-x | tools/checkbins/checkbins.sh | 9 |
3 files changed, 78 insertions, 0 deletions
diff --git a/tools/checkbins/checkbins.bat b/tools/checkbins/checkbins.bat new file mode 100755 index 0000000..8e7c001 --- /dev/null +++ b/tools/checkbins/checkbins.bat @@ -0,0 +1,4 @@ +@echo off +setlocal +set PYTHONPATH=%~dp0..\..\third_party\pefile;%PYTHONPATH% +%~dp0..\..\third_party\python_24\python.exe %~dp0checkbins.py %* diff --git a/tools/checkbins/checkbins.py b/tools/checkbins/checkbins.py new file mode 100755 index 0000000..318720e --- /dev/null +++ b/tools/checkbins/checkbins.py @@ -0,0 +1,65 @@ +#!/usr/bin/python +# Copyright (c) 2009 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Makes sure that all EXE and DLL files in the provided directory were built +correctly. + +Currently this tool will check that binaries were built with /NXCOMPAT and +/DYNAMICBASE set. +""" + +import os +import optparse +import sys + +import pefile + +PE_FILE_EXTENSIONS = ['.exe', '.dll'] +DYNAMICBASE_FLAG = 0x0040 +NXCOMPAT_FLAG = 0x0100 + +def IsPEFile(path): + return (os.path.isfile(path) and + os.path.splitext(path)[1].lower() in PE_FILE_EXTENSIONS) + +def main(options, args): + directory = args[0] + success = True + + for file in os.listdir(directory): + path = os.path.abspath(os.path.join(directory, file)) + if not IsPEFile(path): + continue + pe = pefile.PE(path, fast_load=True) + + # Check for /DYNAMICBASE. + if pe.OPTIONAL_HEADER.DllCharacteristics & DYNAMICBASE_FLAG: + if options.verbose: + print "Checking %s for /DYNAMICBASE... PASS" % path + else: + success = False + print "Checking %s for /DYNAMICBASE... FAIL" % path + + # Check for /NXCOMPAT. + if pe.OPTIONAL_HEADER.DllCharacteristics & NXCOMPAT_FLAG: + if options.verbose: + print "Checking %s for /NXCOMPAT... PASS" % path + else: + success = False + print "Checking %s for /NXCOMPAT... FAIL" % path + + if not success: + sys.exit(1) + +if __name__ == '__main__': + usage = "Usage: %prog [options] DIRECTORY" + option_parser = optparse.OptionParser(usage=usage) + option_parser.add_option("-v", "--verbose", action="store_true", + default=False, help="Print debug logging") + options, args = option_parser.parse_args() + if not args: + option_parser.print_help() + sys.exit(0) + main(options, args) diff --git a/tools/checkbins/checkbins.sh b/tools/checkbins/checkbins.sh new file mode 100755 index 0000000..e0e3bd1 --- /dev/null +++ b/tools/checkbins/checkbins.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# Copyright (c) 2009 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Include pefile in the path. +PYTHONPATH="$(dirname $0)/../../third_party/pefile:$PYTHONPATH" +export PYTHONPATH +python "$(dirname $0)/checkbins.py" "$@" |