Voltar à lista
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âmetroTipoDescrição
dirfdintDescritor do diretório base, ou AT_FDCWD.
pathnameconst char *Caminho do executável, absoluto, relativo a `dirfd`, ou vazio com AT_EMPTY_PATH.
argvchar *const[]Array de argumentos, terminado em NULL.
envpchar *const[]Array de variáveis de ambiente, terminado em NULL.
flagsintAT_EMPTY_PATH, AT_SYMLINK_NOFOLLOW.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1dirfdint
rsiargumento 2pathnameconst char *
rdxargumento 3argvchar *const[]
r10argumento 4envpchar *const[]
r8argumento 5flagsint

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.

Relacionadas