Linux x86_64Processos & threads#322
execveat
Como execve, mas resolve o caminho do executável relativo a um descritor de diretório (ou executa diretamente a partir de um descritor já aberto).
Descrição
Com AT_EMPTY_PATH e um descritor apontando para o próprio binário (ex.: obtido de um memfd), permite executar um programa que nunca teve um caminho visível no sistema de arquivos — usado por alguns mecanismos de sandboxing e distribuição de binários.
man 2Desde o kernel 3.19
Assinatura
int execveat(
int dirfd,
const char * pathname,
char *const[] argv,
char *const[] envp,
int flags
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| dirfd | int | Descritor do diretório base, ou AT_FDCWD. |
| pathname | const char * | Caminho do executável, absoluto, relativo a `dirfd`, ou vazio com AT_EMPTY_PATH. |
| argv | char *const[] | Array de argumentos, terminado em NULL. |
| envp | char *const[] | Array de variáveis de ambiente, terminado em NULL. |
| flags | int | AT_EMPTY_PATH, AT_SYMLINK_NOFOLLOW. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | dirfdint |
| rsi | argumento 2 | pathnameconst char * |
| rdx | argumento 3 | argvchar *const[] |
| r10 | argumento 4 | envpchar *const[] |
| r8 | argumento 5 | flagsint |
Valor de retorno
Não retorna em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- ENOENT(2)
- Arquivo ou diretório inexistente.
- ENOEXEC(8)
- Formato de executável inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- E2BIG(7)
- Lista de argumentos grande demais.