On 05/01/2015 11:23 PM, Trevor Cordes wrote:
On 2015-01-05 Sean Walberg wrote:
Don't run ldd on a binary you don't trust [1]. I think the safer way
Oops. Oh well, it didn't seem to do anything, and I was running it as a bogus severely limited user.
I really don't understand the error/output when I run the a.out though. Since my description was lacking, here's the exact output I get:
% strace ./a.out execve("./a.out", ["./a.out"], [/* 34 vars */]) = -1 ENOENT (No such file or directory) write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory ) = 40 exit_group(1) = ? +++ exited with 1 +++
Who's telling me ENOENT? The shell? Kernel? a.out? I don't get it at all... very confused.
Could this happen with a messed up / incomplete a.out?
Well, execve is a system call, as shown by strace, so the ENOENT error most likely would come from the kernel. A "man execve" lists the reasons for various error codes, and it seems in this case, a missing shared library is the most likely candidate.
is objdump -p a.out | grep NEEDED.
NEEDED libnssutil3.so
If that library is not in the usual /lib or /usr/lib, or somewhere in the LD_LIBRARY_PATH, then that's probably the problem. Otherwise, I don't know what the problem might be. The executable file obviously exists, and it doesn't seem it would need an interpreter, so it must be a shared library that it needs and the kernel can't find.