-2

Как изменить права доступа к файлу для выполнения исполняемого двоичного файла ELF в Kali Linux? Я пытался chmod +x <filename> а затем запустить его с ./filename но все, что я получаю, это Error: No file found . Есть другие идеи? Я даже попробовал chmod 777 <filename> . Мне интересно, есть ли что-то, что мне не хватает?

Редактировать:

Вывод file <filename>:

root@swat:~/Downloads# file talisman 
talisman: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, 
BuildID[sha1]=2b131df906087adf163f8cba1967b3d2766e639d, not stripped

Вывод ldd <filename>:

root@swat:~/Downloads# ldd ./talisman 
not a dynamic executable

Вывод ls /lib:

root@swat:~# ls /lib
console-setup  init                                  startpar
cpp            klibc-k3La8MUnuzHQ0_kG8hokcGAC0PA.so  systemd
crda           ld-linux.so.2                         terminfo
cryptsetup     live                                  udev
firmware       lsb                                   x86_64-linux-gnu
hdparm         modprobe.d
ifupdown       modules

2 ответа2

1

В нескольких случаях вы можете получить сообщение «Нет такого файла или каталога»:

  • Файл не существует. Это не тот случай, здесь.

  • Файл с таким именем существует, но это свисающая символическая ссылка. chmod +x ./filename напечатало бы ошибку, если бы это было так.

  • Этот файл представляет собой динамически связанный файл ELF, и интерпретатор программы, необходимый для его запуска, не существует.

    Использовать readelf -l filename | grep interpreter чтобы выяснить, какой программный интерпретатор требуется, и убедиться, что он существует и имеет правильные разрешения.

  • Файл существует, и вы можете даже прочитать его, но когда вы пытаетесь выполнить его, вам говорят, что он не существует.

Команда file -L filename скажет вам, что это за двоичный файл.

Я не могу найти ни одного примера 32-битного исполняемого файла Linux, чтобы попробовать это, но, возможно, вы можете просто запустить команду file и проверить, является ли файл 32-битным или 64-битным. У вас может быть 32-разрядный двоичный файл в 64-разрядной системе, в которой не установлена 32-разрядная поддержка (это особый случай "отсутствует интерпретатор программы").

0

Это решает это.

root@swat:~/Downloads# readelf -l ./talisman | grep interpreter
[Requesting program interpreter: /lib/ld-linux.so.2]

Затем я искал недостающие библиотеки, выполнив эту команду:

root@swat:~/Downloads# ldd /bin/ls
linux-vdso.so.1 (0x00007ffe9a971000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 
(0x00007fe90a8a7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe90a50a000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fe90a297000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe90a093000)
/lib64/ld-linux-x86-64.so.2 (0x000056083d3b2000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 
(0x00007fe909e76000)

Это подтверждает, что у меня нет неработающих символических ссылок на эту библиотеку и что загружаемая библиотека (/lib/ld-linux.so.2) не найдена в /bin/ls .

Выпуск это решает проблему:

sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .