Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Broken elf header incorrectly identified as missing file



On Thu, Apr 16, 2026 at 7:47 PM Nathan <nathan.titirangi@xxxxxxxxx> wrote:
>
> 1. Create a malformed elf binary by deleting everything past part way through the file (a broken binary that triggers the bug is attached)
[...]
> 4. Observe that the file is incorrectly identified as not existing, when the actual issue is a broken elf header

Firstly, "command not found" does not mean "missing file".  If you are
actually getting a "no such file" error, it probably means the shell
is attempting to read the file as command input and is reporting that
what it thinks is a #! introduction is not followed by a reference to
any existing file, although that would be odd and I'd expect a "bad
interpreter" error or similar.

Secondly, this is an OS-specific problem (see Oliver's reply).  On MacOs:

% dd if=/bin/cat of=$HOME/bin/broken bs=1024 count=1
1+0 records in
1+0 records out
1024 bytes transferred in 0.000589 secs (1738540 bytes/sec)
% chmod +x ~/bin/broken
% broken
zsh: malformed Mach-o file: broken

Thirdly, trying the above on Ubuntu:

% dd if=/bin/cat of=$HOME/bin/broken bs=1024 count=1
1+0 records in
1+0 records out
1024 bytes (1.0 kB, 1.0 KiB) copied, 4.4878e-05 s, 22.8 MB/s
% chmod +x ~/bin/broken
% broken
zsh: segmentation fault  broken

I can't get anything but a segmentation fault, I never get "not found"
or "no such file".

% file =broken
/home/schaefer/bin/broken: ELF 64-bit LSB shared object, x86-64,
version 1 (SYSV), dynamically linked, interpreter
/lib64/ld-linux-x86-64.so.2, missing section headers at 39320

Finally, if this is important to you for some reason, try adding to .zshrc:

command_not_found_handler() {
  local search=( ${^path}/$1(N) )
  [[ -n $search ]] && file $search
  return 127
}




Messages sorted by: Reverse Date, Date, Thread, Author