動的リンカーを実行できます。いくつかの動的リンカーまたは共有オブジェクトを実行して間接的に(この場合はコマンドラインオプションを動的リンカーに渡すことはできず、ELFの場合はプログラムの.interpセクションに格納されている動的リンクがデバイス上で実行されます)直接実行:
/lib/ld-linux.so.* [オプション] [プログラム [パラメータ]]
https://jlk.fjfi.cvut.cz/arch/manpages/man/core/man-pages/ld.so.8.en
同様の情報は以下にあります。図書館案内。
ところがいざやってみると、
$ LD_DEBUG=libs /usr/lib/ld-linux.so.2 ls
23325: find library=ls [0]; searching
23325: search cache=/etc/ld.so.cache
23325:
ls: error while loading shared libraries: ls: cannot open shared object file
$ LD_DEBUG=libs ls
23503: find library=libcap.so.2 [0]; searching
23503: search cache=/etc/ld.so.cache
23503: trying file=/usr/lib/libcap.so.2
...
私は何が間違っていましたか?ld-linux.so
プログラムを直接実行する方法はありますか?
答え1
フルパスを試してくださいls
。
[ctor@dom0 tst]$ /lib64/ld-linux-x86-64.so.2 /usr/bin/ls
afile
[ctor@dom0 tst]$ /lib64/ld-linux-x86-64.so.2 ls
ls: error while loading shared libraries: ls: cannot open shared object file
[ctor@dom0 tst]$ /lib64/ld-linux-x86-64.so.2 anyinexistentcommandhere
anyinexistentcommandhere: error while loading shared libraries: anyinexistentcommandhere: cannot open shared object file
[ctor@dom0 tst]$ ldd ls
ldd: ./ls: No such file or directory
[ctor@dom0 tst]$ ldd `type -P ls`
linux-vdso.so.1 (0x00007fffd636c000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x000074b858cc3000)
libcap.so.2 => /lib64/libcap.so.2 (0x000074b858abe000)
libc.so.6 => /lib64/libc.so.6 (0x000074b8586f8000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x000074b858486000)
libdl.so.2 => /lib64/libdl.so.2 (0x000074b858282000)
/lib64/ld-linux-x86-64.so.2 (0x000074b85910a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000074b858064000)
[ctor@dom0 tst]$ LD_DEBUG=libs /lib64/ld-linux-x86-64.so.2 ls
6380: find library=ls [0]; searching
6380: search cache=/etc/ld.so.cache
6380:
ls: error while loading shared libraries: ls: cannot open shared object file
[ctor@dom0 tst]$ LD_DEBUG=libs /lib64/ld-linux-x86-64.so.2 inexistentcommand
6415: find library=inexistentcommand [0]; searching
6415: search cache=/etc/ld.so.cache
6415:
inexistentcommand: error while loading shared libraries: inexistentcommand: cannot open shared object file
[ctor@dom0 tst]$ LD_DEBUG=libs /lib64/ld-linux-x86-64.so.2 /usr/bin/ls
6342: find library=libselinux.so.1 [0]; searching
6342: search cache=/etc/ld.so.cache
6342: trying file=/lib64/libselinux.so.1
6342:
6342: find library=libcap.so.2 [0]; searching
6342: search cache=/etc/ld.so.cache
6342: trying file=/lib64/libcap.so.2
6342:
6342: find library=libc.so.6 [0]; searching
6342: search cache=/etc/ld.so.cache
6342: trying file=/lib64/libc.so.6
6342:
6342: find library=libpcre.so.1 [0]; searching
6342: search cache=/etc/ld.so.cache
6342: trying file=/lib64/libpcre.so.1
6342:
6342: find library=libdl.so.2 [0]; searching
6342: search cache=/etc/ld.so.cache
6342: trying file=/lib64/libdl.so.2
6342:
6342: find library=libpthread.so.0 [0]; searching
6342: search cache=/etc/ld.so.cache
6342: trying file=/lib64/libpthread.so.0
6342:
6342:
6342: calling init: /lib64/libpthread.so.0
6342:
6342:
6342: calling init: /lib64/libc.so.6
6342:
6342:
6342: calling init: /lib64/libdl.so.2
6342:
6342:
6342: calling init: /lib64/libpcre.so.1
6342:
6342:
6342: calling init: /lib64/libcap.so.2
6342:
6342:
6342: calling init: /lib64/libselinux.so.1
6342:
6342:
6342: initialize program: /usr/bin/ls
6342:
6342:
6342: transferring control: /usr/bin/ls
6342:
afile