Linux可执行文件无法在运行strace时运行,并显示错误“ / usr / bin / strace:exec:无此类文件或目录”

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

hhqqhhhhqqhh 回答:Linux可执行文件无法在运行strace时运行,并显示错误“ / usr / bin / strace:exec:无此类文件或目录”

此二进制文件很奇怪:它链接为将/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
本文链接:https://www.f2er.com/2381679.html

大家都在问