Quando hai detto che hai fatto un ricorsivo otool -L
cosa intendi? Ci sono un sacco di librerie condivise necessarie per fare questo lavoro, ad esempio:
otool -L /bin/bash
/bin/bash:
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
Poi si deve eseguire otool -L
su quelli (poi otool -L
su quelli):
otool -L /usr/lib/libSystem.B.dylib
/usr/lib/libSystem.B.dylib:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/lib/system/libcache.dylib (compatibility version 1.0.0, current version 62.0.0)
/usr/lib/system/libcommonCrypto.dylib (compatibility version 1.0.0, current version 60049.0.0)
/usr/lib/system/libcompiler_rt.dylib (compatibility version 1.0.0, current version 35.0.0)
/usr/lib/system/libcopyfile.dylib (compatibility version 1.0.0, current version 103.0.0)
/usr/lib/system/libcorecrypto.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/system/libdispatch.dylib (compatibility version 1.0.0, current version 339.1.9)
/usr/lib/system/libdyld.dylib (compatibility version 1.0.0, current version 239.3.0)
/usr/lib/system/libkeymgr.dylib (compatibility version 1.0.0, current version 28.0.0)
/usr/lib/system/liblaunch.dylib (compatibility version 1.0.0, current version 842.1.4)
/usr/lib/system/libmacho.dylib (compatibility version 1.0.0, current version 845.0.0)
/usr/lib/system/libquarantine.dylib (compatibility version 1.0.0, current version 71.0.0)
/usr/lib/system/libremovefile.dylib (compatibility version 1.0.0, current version 33.0.0)
/usr/lib/system/libsystem_asl.dylib (compatibility version 1.0.0, current version 217.1.4)
/usr/lib/system/libsystem_blocks.dylib (compatibility version 1.0.0, current version 63.0.0)
/usr/lib/system/libsystem_c.dylib (compatibility version 1.0.0, current version 997.1.1)
/usr/lib/system/libsystem_configuration.dylib (compatibility version 1.0.0, current version 596.12.0)
/usr/lib/system/libsystem_dnssd.dylib (compatibility version 1.0.0, current version 522.1.11)
/usr/lib/system/libsystem_info.dylib (compatibility version 1.0.0, current version 449.1.3)
/usr/lib/system/libsystem_kernel.dylib (compatibility version 1.0.0, current version 2422.1.72)
/usr/lib/system/libsystem_m.dylib (compatibility version 1.0.0, current version 3047.16.0)
/usr/lib/system/libsystem_malloc.dylib (compatibility version 1.0.0, current version 23.1.10)
/usr/lib/system/libsystem_network.dylib (compatibility version 1.0.0, current version 241.3.0)
/usr/lib/system/libsystem_notify.dylib (compatibility version 1.0.0, current version 121.0.0)
/usr/lib/system/libsystem_platform.dylib (compatibility version 1.0.0, current version 24.1.4)
/usr/lib/system/libsystem_pthread.dylib (compatibility version 1.0.0, current version 53.1.4)
/usr/lib/system/libsystem_sandbox.dylib (compatibility version 1.0.0, current version 278.10.0)
/usr/lib/system/libsystem_stats.dylib (compatibility version 1.0.0, current version 93.1.26)
/usr/lib/system/libunc.dylib (compatibility version 1.0.0, current version 28.0.0)
/usr/lib/system/libunwind.dylib (compatibility version 1.0.0, current version 35.3.0)
/usr/lib/system/libxpc.dylib (compatibility version 1.0.0, current version 300.1.17)
ho fatto un test rapido con:
mkdir -p /Users/chroot/bin /Users/chroot/usr/lib/system
cp /bin/bash /Users/chroot/bin
cp /usr/lib/* /Users/chroot/usr/lib
cp /usr/lib/system/* /Users/chroot/usr/lib/system
chroot /Users/chroot /bin/bash
Questo ha funzionato, quindi presumo che manchi una libreria condivisa di cui avevi bisogno. Probabilmente potresti scrivere uno script per fare un ricorsivo otool -L
e ottenere semplicemente le librerie condivise esatte di cui hai bisogno, ma probabilmente è più facile fare una copia di massa.
Prova 'strace'ing il comando per vedere cosa sta cercando di' open (1) ' – kojiro
Mac non ha strace, quindi ho usato dtruss. Non vederlo caricare libs diverse da roba dtruss: sudo dtruss -fa -t open/bin/bash open ("/ usr/lib/dtrace/libdtrace_dyld.dylib \ 0", 0x0, 0x0) = 3 0 open ("/ dev/tty \ 0", 0x6, 0x7FFF737E7788) = 3 0 aperto ("/ dev/dtracehelper \ 0", 0x2, 0x7FFF5DA4E460) = 3 0 aperto ("/ usr/share/terminfo/73/screen \ 0 ", 0x0, 0x0) = 3 0 open ("/dev/dtracehelper \ 0 ", 0x2, 0x7FFF5A9FA4C0) = 3 0 – ekaqu
sudo dtruss/bin/bash -c" echo hi "sembra darmi molto maggiori dettagli su quali librerie sono aperte. – ekaqu