Running in a chroot, /proc may not be mounted:
Cannot open /proc/self/exe: No such file or directory
execv error: No such file or directory
An alternative on Linux to using either /proc/self/exe or argv[0] is using the information passed by the ELF interpreter, made available by glibc as such:
#include <stdio.h>
#include <sys/auxv.h>
int main(int argc, char **argv)
{
printf("%s\n", (char *)getauxval(AT_EXECFN));
return(0);
}
Note that getauxval is a glibc extension, and to be robust you should check so that it doesn't return NULL (indicating that the ELF interpreter hasn't provided the AT_EXECFN parameter), but I don't think this is ever actually a problem on Linux.
Source: https://code.i-harness.com/en/q/f9d4a
Running in a chroot,
/procmay not be mounted:Source: https://code.i-harness.com/en/q/f9d4a