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
#!/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
('<', '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
#!/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