【问题标题】:Linux Executable fails to run with error “/usr/bin/strace: exec: No such file or directory” on running straceLinux 可执行文件在运行 strace 时无法运行并出现错误“/usr/bin/strace: exec: No such file or directory”
【发布时间】:2020-04-22 17:11:32
【问题描述】:

我需要使用 strace 分析 linux 二进制可执行文件以捕获系统调用。

在运行命令时: /usr/bin/strace ./005f32fffe1da3bc100e7dcd8b2f8f2c

我收到了这个错误:

execve("./005f32fffe1da3bc100e7dcd8b2f8f2c", ["./005f32fffe1da3bc100e7dcd8b2f8f"...], 0x7fffd9d0a120 /* 53 vars */) = -1 ENOENT (No such file or directory) fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 write(2, "/usr/bin/strace: exec: No such f"..., 49/usr/bin/strace: exec: No such file or directory ) = 49 getpid() = 3699 exit_group(1) = ? +++ exited with 1 +++

我的文件类型是 32 位 ELF 二进制文件。

file 005f32fffe1da3bc100e7dcd8b2f8f2c 005f32fffe1da3bc100e7dcd8b2f8f2c: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, stripped

我的机器是 64 位运行 Ubuntu,我安装了 libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1。

【问题讨论】:

  • 再次问同样的问题,虽然没有提供额外的细节,但不太可能产生不同的结果。 stackoverflow.com/q/61344698。此外,您实际上忘了在这里问任何问题。
  • 我已经在评论部分回答了你的问题和 nate 的问题,说我无法在没有 strace 的情况下运行这个文件。这是否意味着这个文件不会在我的平台上运行因为这个问题已经关闭,然后在我的 cmets 之后没有任何人回答,因此我想再次发布它。

标签: elf strace


【解决方案1】:

这个二进制文件很奇怪:它被链接到使用/lib/ld- 作为动态加载器。

32 位 i386 动态加载程序通常称为/lib/ld-linux.so.2。我们可以假设您的二进制文件已以某种方式损坏。

在您的其他评论中,您说没有strace 二进制文件将无法运行(因为/lib/ld- 不存在)。在strace 下运行二进制文件可以神奇地使二进制文件工作。

您应该能够通过使用显式加载程序调用在strace 下运行它:

strace -ff /lib/ld-linux.so.2 ./005f32fffe1da3bc100e7dcd8b2f8f2c

更新:

我收到一些这样的系统调用:
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) stat64("/lib/i686/sse2", 0xffe9b300) = -1 ENOENT (No such file or directory) +++ exited with 127 +++
我不确定这些是什么类型的系统调用?

这是尝试加载您的程序并使用accessstat64 系统调用的动态链接器。

如何使用 strace 运行以下文件?如何根据文件命令输出知道在带有 -ff 选项的 strace 命令中使用哪个库?
file mosquitto_pub mosquitto_pub: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=7ced951dc3a859a6829feb46fd5cf757a6073361, not stripped

这是一个 64 位二进制文​​件,带有类似损坏的 /lib64/l 动态加载程序。

x86-64 上 GLIBC 的标准 64 位加载程序是 /lib64/ld-linux-x86-64.so.2,因此您想要的命令是:

strace -ff /lib64/ld-linux-x86-64.so.2 ./mosquitto_pub

【讨论】:

  • 输出很大,我收到一些这样的系统调用:access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) stat64("/lib/i686/sse2", 0xffe9b300) = -1 ENOENT (No such file or directory) +++ exited with 127 +++我不确定这些是什么类型的系统调用?
  • 您能帮我了解如何使用 strace 运行以下文件吗?如何根据文件命令输出知道在带有 -ff 选项的 strace 命令中使用哪个库? file mosquitto_pubmosquitto_pub: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=7ced951dc3a859a6829feb46fd5cf757a6073361, not stripped
  • @mmg 我更新了答案(但请下次再问一个新问题)。
猜你喜欢
  • 2013-08-12
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2022-08-15
  • 2018-02-22
相关资源
最近更新 更多