LLVM OpenMP
22.0.0git
runtime
tools
check-execstack.py
Go to the documentation of this file.
1
#!/usr/bin/env python3
2
3
#
4
# //===----------------------------------------------------------------------===//
5
# //
6
# // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
7
# // See https://llvm.org/LICENSE.txt for license information.
8
# // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
9
# //
10
# //===----------------------------------------------------------------------===//
11
#
12
13
import
argparse
14
import
os
15
import
re
16
import
sys
17
from
libomputils
import
ScriptError, error, print_error_line, execute_command
18
19
20
def
is_stack_executable_readelf
(library):
21
"""Returns true if stack of library file is executable"""
22
r = execute_command([
"readelf"
,
"-l"
,
"-W"
, library])
23
if
r.returncode != 0:
24
error(
"{} failed"
.format(r.command))
25
stack_lines = []
26
for
line
in
r.stdout.split(os.linesep):
27
if
re.search(
"STACK"
, line):
28
stack_lines.append(line.strip())
29
if
not
stack_lines:
30
error(
"{}: Not stack segment found"
.format(library))
31
if
len(stack_lines) > 1:
32
error(
"{}: More than one stack segment found"
.format(library))
33
h =
r"0x[0-9a-fA-F]+"
34
m = re.search(
35
r"((GNU_)?STACK)\s+({0})\s+({0})\s+({0})\s+({0})\s+({0})"
36
" ([R ][W ][E ])"
.format(h),
37
stack_lines[0],
38
)
39
if
not
m:
40
error(
"{}: Cannot parse stack segment line"
.format(library))
41
if
m:
42
flags = m.group(8)
43
if
"E"
in
flags:
44
return
True
45
return
False
46
47
48
def
main
():
49
parser = argparse.ArgumentParser(
50
description=
"Check library does not have"
" executable stack"
51
)
52
parser.add_argument(
"library"
, help=
"The library file to check"
)
53
commandArgs = parser.parse_args()
54
if
is_stack_executable_readelf
(commandArgs.library):
55
error(
"{}: Stack is executable"
.format(commandArgs.library))
56
57
58
if
__name__ ==
"__main__"
:
59
try
:
60
main
()
61
except
ScriptError
as
e:
62
print_error_line(str(e))
63
sys.exit(1)
64
65
# end of file
check-execstack.main
main()
Definition
check-execstack.py:48
check-execstack.is_stack_executable_readelf
is_stack_executable_readelf(library)
Definition
check-execstack.py:20
Generated on
for LLVM OpenMP by
1.14.0