contrib: use LIEF in macOS symbol checks

pull/826/head
fanquake 4 years ago
parent a632cbcee5
commit e93ac26b85
No known key found for this signature in database
GPG Key ID: 2EEB9F5CC09526C1

@ -15,6 +15,7 @@ import sys
import os import os
from typing import List, Optional from typing import List, Optional
import lief
import pixie import pixie
# Debian 8 (Jessie) EOL: 2020. https://wiki.debian.org/DebianReleases#Production_Releases # Debian 8 (Jessie) EOL: 2020. https://wiki.debian.org/DebianReleases#Production_Releases
@ -53,7 +54,6 @@ IGNORE_EXPORTS = {
} }
CPPFILT_CMD = os.getenv('CPPFILT', '/usr/bin/c++filt') CPPFILT_CMD = os.getenv('CPPFILT', '/usr/bin/c++filt')
OBJDUMP_CMD = os.getenv('OBJDUMP', '/usr/bin/objdump') OBJDUMP_CMD = os.getenv('OBJDUMP', '/usr/bin/objdump')
OTOOL_CMD = os.getenv('OTOOL', '/usr/bin/otool')
# Allowed NEEDED libraries # Allowed NEEDED libraries
ELF_ALLOWED_LIBRARIES = { ELF_ALLOWED_LIBRARIES = {
@ -203,24 +203,13 @@ def check_ELF_libraries(filename) -> bool:
ok = False ok = False
return ok return ok
def macho_read_libraries(filename) -> List[str]:
p = subprocess.Popen([OTOOL_CMD, '-L', filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True)
(stdout, stderr) = p.communicate()
if p.returncode:
raise IOError('Error opening file')
libraries = []
for line in stdout.splitlines():
tokens = line.split()
if len(tokens) == 1: # skip executable name
continue
libraries.append(tokens[0].split('/')[-1])
return libraries
def check_MACHO_libraries(filename) -> bool: def check_MACHO_libraries(filename) -> bool:
ok: bool = True ok: bool = True
for dylib in macho_read_libraries(filename): binary = lief.parse(filename)
if dylib not in MACHO_ALLOWED_LIBRARIES: for dylib in binary.libraries:
print('{} is not in ALLOWED_LIBRARIES!'.format(dylib)) split = dylib.name.split('/')
if split[-1] not in MACHO_ALLOWED_LIBRARIES:
print(f'{split[-1]} is not in ALLOWED_LIBRARIES!')
ok = False ok = False
return ok return ok

Loading…
Cancel
Save