Jadi dengan perintah lain file executable ada, namun ketika saya mencoba untuk mengeksekusinya, ia mengklaim tidak ada.
Itu bukan karakter khusus dalam nama karena saya menamainya dengan "kucing". Dan tampaknya menjadi biner untuk arsitektur yang benar ... "sepertinya", saya kira pertanyaannya adalah, apa lagi melempar pesan kesalahan tat SELAIN ... file tidak ada di sana, karena jelas IS!
xd ldd
linux-gate.so.1 => (0xb77bc000)
libQtGui.so.4 => /usr/lib/i386-linux-gnu/libQtGui.so.4 (0xb6cc2000)
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb6c98000)
libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xb6c8f000)
libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xb6c76000)
libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xb6c6d000)
libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb6bd1000)
libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xb6b9b000)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xb6b88000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb6a50000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb6a2a000)
libQtSql.so.4 => /usr/lib/i386-linux-gnu/libQtSql.so.4 (0xb69ea000)
libQtCore.so.4 => /usr/lib/i386-linux-gnu/libQtCore.so.4 (0xb6704000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb66ea000)
libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0xb66e7000)
libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb65ea000)
libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb6598000)
librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb658f000)
libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb6575000)
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb6571000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6485000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6468000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb6305000)
libaudio.so.2 => /usr/lib/i386-linux-gnu/libaudio.so.2 (0xb62ea000)
libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xb62e4000)
libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb62ba000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6297000)
/lib/ld-lsb.so.3 => /lib/ld-linux.so.2 (0xb77bd000)
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb6258000)
libffi.so.5 => /usr/lib/i386-linux-gnu/libffi.so.5 (0xb624f000)
libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xb61f1000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb61ee000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb61e8000)
uname -m (Juga, distribusi saya adalah Wheezy Debian.)
i686
file xls
xls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.15,
BuildID[sha1]=0xa9786f61b371a683ae4306792f95e0636c288883, not stripped
ls -ld xls
-rwxr-xr-x 1 root root 4634064 May 20 14:35 xls
kucing
root@pc170:# cat xls > zls
root@pc170:# ./zls
-su: ./zls: Permission denied
root@pc170:# chmod +x zls
root@pc170:# ./zls
-su: ./zls: No such file or directory
waktu
root@pc170:# time ./zls
-su: ./zls: No such file or directory
real 0m0.002s
user 0m0.000s
sys 0m0.000s
linux
executable
Lee
sumber
sumber
LD_DEBUG=all /lib/ld-lsb.so.3 ./zls
?"su: "
yang membuatnya tampak seperti Anda mengeksekusisystem()
atau sesuatu dari dalam program dan mengatakan bahwa setelah melakukan itu tidaksu
dapat menemukan executable di direktori itu berakhir. Apa yang terjadi jika Anda salin atau symlink ke/bin
atau sesuatu?objdump -j .interp -s ./zls
. Saya menduga bahwa akan mencantumkan file yang tidak ada.Jawaban:
Ini memang terlihat seperti loader yang hilang . Cerpen: loader dinamis yang diharapkan oleh program tidak ada, dan pesan kesalahan menyesatkan dalam kasus ini. Karena saya tidak berpikir saya sudah membahas itu sebelumnya, izinkan saya menjelaskan bagian yang relevan dari output
ldd
. Sebagian besar terdiri dari garis-garis bentuklibrary_soname => /path/to/library_file
.Di antara pustaka, kami melihat sesuatu yang bukan pustaka bersama: ini adalah program yang memuat pustaka bersama. Program meminta
/lib/ld-lsb.so.3
, tetapi kernel tidak menemukannya, jadi ia melaporkan “Tidak ada file atau direktori”. Namunldd
tidak menemukan loader, karenaldd
adalah skrip wrapper yang memanggil loader hard-coded di lingkungan khusus, dan loader selalu melaporkan jalurnya sendiri, apa pun jalur loader yang diharapkan program.Anda miliki
/lib/ld-linux.so.2
di sistem Anda, yang merupakan lokasi standar de facto untuk pemuat ELF pada sistem Linux x86_32. Program ini membutuhkan/lib/ld-lsb.so.3
, yang merupakan lokasi standar de jure .Instal dukungan minimal LSB distribusi Anda, misalnya
lsb-core
paket di Debian. Jika distribusi Anda tidak memiliki (sebagian besar), buat tautan simbolik/lib/ld-lsb.so.3 -> ld-linux.so.2
. Dalam keputusasaan Anda dapat menghubungi loader secara eksplisit:/lib/ld-linux.so.2 ./xls
.sumber
ldd
output. Tangkapan yang bagus!readelf -a zls | grep "Requesting program interpreter"
akan mencetak loader.