Как запускать программы с помощью ld-inux.so?

Стандартного способа не существует.

Вы можете избежать использования временной переменной, используя функцию. Следующая функция заботится о том, чтобы переменные без установки оставались без установки, а пустые переменные - пустыми. Однако она не поддерживает возможности, встречающиеся в некоторых оболочках, такие как переменные только для чтения или типизированные переменные.

unexport () {
  while [ "$#" -ne 0 ]; do
    eval "set -- \"\${$1}\" \"\${$1+set}\" \"\$@\""
    if [ -n "$2" ]; then
      unset "$3"
      eval "$3=\$1"
    fi
    shift; shift; shift
  done
}
unexport foo bar

В ksh, bash и zsh переменную можно раскрыть с помощью typeset +x foo. Это сохраняет специальные свойства, такие как типы, поэтому предпочтительнее использовать именно это. Я думаю, что все оболочки, имеющие встроенный typeset, имеют typeset +x.

case $(LC_ALL=C type typeset 2>&1) in
  typeset\ *\ builtin) unexport () { typeset +x -- "$@"; };;
  *) unexport () { … };; # code above
esac
0
10.09.2018, 13:58
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
6
28.01.2020, 02:31

Теги

Похожие вопросы