Linux 可执行文件在运行 strace 时出现 "usrbinstrace: exec: No such file or directory "错误,无法运行。

问题描述 投票:-1回答:1

我需要使用 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。

elf strace
1个回答
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 +++ 我不知道这些是什么系统调用?

这是动态链接器在尝试加载你的程序,并使用了 访问统计64 系统调用。

如何使用 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 动态加载器。

GLIBC的标准64位加载器,它在 x86-64/lib64/ld-linux-x86-64.so.2所以你想要的命令是:

strace -ff /lib64/ld-linux-x86-64.so.2 ./mosquitto_pub
© www.soinside.com 2019 - 2024. All rights reserved.