如何更改文件权限以在 Kali Linux 中执行二进制可执行 ELF 文件?我一直在尝试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
答案1
在以下几种情况下,您可能会收到“没有此文件或目录”的消息:
该文件不存在。这里不是这种情况。
有一个同名文件,但它是一个悬空符号链接。
chmod +x ./filename
如果是这种情况,则会打印错误。该文件是动态链接的 ELF 文件,运行它所需的程序解释器不存在。
用于
readelf -l filename | grep interpreter
找出需要哪个程序解释器,并验证它存在且具有正确的权限。该文件存在,您甚至可以读取它,但是当您尝试执行它时,您会被告知它不存在。
该file -L filename
命令将告诉您这个二进制文件是什么。
我找不到任何 32 位 Linux 可执行文件示例来尝试此操作,但也许您可以运行命令file
并验证文件是 32 位还是 64 位。您可能在未安装 32 位支持的 64 位系统上有一个 32 位二进制文件(这是“程序解释器丢失”的特殊情况)。
答案2
这解决了它。
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