Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# appropriate for the system
for name in names:
location = ctypes.util.find_library(name)
if location:
try:
cairoLib = ctypes.CDLL(location)
return
except:
pass
# If the above didn't find it on OS X then we still have a
# trick up our sleeve...
if 'wxMac' in wx.PlatformInfo:
# look at the libs linked to by the pycairo extension module
import macholib.MachO
m = macholib.MachO.MachO(cairo._cairo.__file__)
for h in m.headers:
for idx, name, path in h.walkRelocatables():
if 'libcairo' in path:
try:
cairoLib = ctypes.CDLL(path)
return
except:
pass
if not cairoLib:
raise RuntimeError("Unable to find the Cairo shared library")
def _get_machine_type(self, path):
try:
pe = pefile.PE(path)
format_ = 'PE'
if pefile.MACHINE_TYPE[pe.FILE_HEADER.Machine].find('I386') != -1:
arch = '32-bit'
else:
arch = '64-bit'
except pefile.PEFormatError, detail:
try:
self._dprint(detail)
m = MachO(path)
format_ = 'Mach-O'
for header in m.headers:
if CPU_TYPE_NAMES.get(header.header.cputype,header.header.cputype) == 'x86_64':
#if header.MH_MAGIC == MH_MAGIC_64:
arch = '64-bit'
else:
arch = '32-bit'
except:
try:
elffile = ELFFile(open(path, 'rb'))
format_ = 'ELF'
e_ident = elffile.header['e_ident']
if e_ident['EI_CLASS'] == 'ELFCLASS64':
arch = '64-bit'
else:
arch = '32-bit'
def hash_macho0(exe):
headers = MachO.MachO(exe).headers
if len(headers) > 1:
logging.debug('Mach-O binary is FAT')
with open(exe, 'rb') as f:
data = bytes()
for header in headers:
f.seek(header.offset, 0)
start, end = sys.maxsize, 0
for (lc, segment, sections) in header.commands:
if (mach_o.LC_CODE_SIGNATURE == lc.cmd):
logging.warning('Mach-O binary has a signature section')
# The minimum section offset of all load commands is the start of VMP signing part
if (lc.cmd in (mach_o.LC_SEGMENT_64, mach_o.LC_SEGMENT) and
segment.segname.startswith(mach_o.SEG_TEXT.encode('utf-8'))):
for section in sections:
start = min(start, section.offset)
# Expect the String Table is at the end of unsigned binary followed by the code
def load_file(self, name, caller=None):
assert isinstance(name, (str, unicode))
self.msgin(2, "load_file", name)
m = self.findNode(name)
if m is None:
newname = self.locate(name, loader=caller)
if newname is not None and newname != name:
return self.load_file(newname, caller=caller)
if os.path.exists(name):
m = self.createNode(MachO, name)
self.scan_node(m)
else:
m = self.createNode(MissingMachO, name)
self.msgout(2, '')
return m
def get_macho_section_name(filepath):
section_types = set()
try:
macho = MachO(filepath)
except (ValueError, struct.error, IOError):
return set()
for header in macho.headers:
for command in header.commands:
try:
if command[1].nsects:
for sect in command[2]:
if sect.size:
segname = sect.segname.replace("\x00", "")
sectname = sect.sectname.replace("\x00", "")
section_types.add("%s.%s" % (segname, sectname))
except AttributeError, e:
pass