def test_shared_main(self):

        saved_stderr = sys.stderr
        saved_argv = sys.argv
        try:
            sys.stderr = StringIO()

            sys.argv = ["macho_tool"]

            self.assertEqual(_cmdline.main(lambda *args: None), 1)
            self.assertEqual(sys.stderr.getvalue(),
                             "Usage: macho_tool filename...\n")

            names = []

            def record_names(fp, name):
                self.assertEqual(fp, sys.stdout)
                names.append(name)

            sys.stderr = StringIO()
            sys.argv = ["macho_tool", "/bin/sh"]
            self.assertEqual(_cmdline.main(record_names), 0)
            self.assertEqual(sys.stderr.getvalue(), "")
            self.assertEqual(names, ["/bin/sh"])

            names = []
            sys.stderr = StringIO()
            sys.argv = ["macho_tool", "/bin/sh", "/bin/ls"]
            self.assertEqual(_cmdline.main(record_names), 0)
            self.assertEqual(sys.stderr.getvalue(), "")
            self.assertEqual(names, ["/bin/sh", "/bin/ls"])

            names = []
            sys.stderr = StringIO()
            sys.argv = ["macho_tool", "/bin"]
            self.assertEqual(_cmdline.main(record_names), 0)
            self.assertEqual(sys.stderr.getvalue(), "")
            names.sort()
            dn = "/bin"
            real_names = [
                os.path.join(dn, fn) for fn in os.listdir(dn)
                if util.is_platform_file(os.path.join(dn, fn))
            ]
            real_names.sort()

            self.assertEqual(names, real_names)

        finally:
            sys.stderr = saved_stderr
            sys.argv = saved_argv
    def test_shared_main(self):

        saved_stderr = sys.stderr
        saved_argv = sys.argv
        try:
            sys.stderr = StringIO()

            sys.argv = ['macho_tool']

            self.assertEqual(_cmdline.main(lambda *args: None), 1)
            self.assertEqual(sys.stderr.getvalue(), 'Usage: macho_tool filename...\n')

            names = []
            def record_names(fp, name):
                self.assertEqual(fp, sys.stdout)
                names.append(name)


            sys.stderr = StringIO()
            sys.argv = ['macho_tool', '/bin/sh']
            self.assertEqual(_cmdline.main(record_names), 0)
            self.assertEqual(sys.stderr.getvalue(), '')
            self.assertEqual(names, ['/bin/sh'])

            names = []
            sys.stderr = StringIO()
            sys.argv = ['macho_tool', '/bin/sh', '/bin/ls']
            self.assertEqual(_cmdline.main(record_names), 0)
            self.assertEqual(sys.stderr.getvalue(), '')
            self.assertEqual(names, ['/bin/sh', '/bin/ls'])

            names = []
            sys.stderr = StringIO()
            sys.argv = ['macho_tool', '/bin']
            self.assertEqual(_cmdline.main(record_names), 0)
            self.assertEqual(sys.stderr.getvalue(), '')
            names.sort()
            dn = '/bin'
            real_names = [
                    os.path.join(dn, fn) for fn in os.listdir(dn)
                    if util.is_platform_file(os.path.join(dn, fn)) ]
            real_names.sort()

            self.assertEqual(names, real_names)

        finally:
            sys.stderr = saved_stderr
            sys.argv = saved_argv
Example #3
0
#!/usr/bin/env python

from macholib._cmdline import main


def print_file(fp, path):
    print >>fp, path

if __name__ == '__main__':
    try:
        main(print_file)
    except KeyboardInterrupt:
        pass
Example #4
0
    ('<', '64-bit'): 'x86_64',
    ('<', '32-bit'): 'i386',
    ('>', '64-bit'): 'pp64',
    ('>', '32-bit'): 'ppc',
}

def print_file(fp, path):
    print >>fp, path
    m = MachO(path)
    for header in m.headers:
        seen = set()
        if header.MH_MAGIC == MH_MAGIC_64:
            sz = '64-bit'
        else:
            sz = '32-bit'

        print >>fp, '    [%s endian=%r size=%r arch=%r]' % (header.__class__.__name__, 
                header.endian, sz, ARCH_MAP[(header.endian, sz)])
        for idx, name, other in header.walkRelocatables():
            if other not in seen:
                seen.add(other)
                print >>fp, '\t' + other



if __name__ == '__main__':
    try:
        sys.exit(main(print_file))
    except KeyboardInterrupt:
        pass
Example #5
0
#!/usr/bin/env python

from macholib._cmdline import main


def print_file(fp, path):
    print >> fp, path


if __name__ == '__main__':
    try:
        main(print_file)
    except KeyboardInterrupt:
        pass