Saindo dessa questão , corrigi meu kernel em uma missão para iniciar o SQL Server 2017 no Linux. Agora estou indo mais longe, mas estou sendo desligado,
strstr("TracerPid:\t0\n", "TracerPid:") = "TracerPid:\t0\n"
strtol(0x7fe0cf01840b, 0x7ffd380d5eb0, 10, 0) = 0
free(0x7fe0cf018400) = <void>
fclose(0x7fe0cf011980) = 0
getpid() = 3474
getpid() = 3474
getauxval(31, 9, 5, 0x7fe0d034ea67) = 0x7ffd380dcfe0
strncpy(0x7ffd380d5f00, "/opt/mssql/bin/sqlservr", 4095) = 0x7ffd380d5f00
realpath(0x7ffd380d5f00, 0x7ffd380d6f00, 0, 0x7fe0d0323720) = 0x7ffd380d6f00
getpid() = 3474
abort( <no return ...>
--- SIGABRT (Aborted) ---
Acredito que depois de verificar proc
, o SQL Server faz algum outro voodoo para fazer a mesma coisa que um fallback, apenas para ser "extra-seguro" de que ninguém está tentando fazer seu software funcionar.
Agora, eu estou querendo saber se getauxval(3)
pode ser usado também para determinar se um processo está sendo rastreado? Parece que CAPABILITIES
indicam que isso é possível em CAP_SYS_ADMIN
eCAP_SYS_PTRACE
Eu acredito que o primeiro argumento
GETAUXVAL()
diz algo,Abrindo
/usr/include/x86_64-linux-gnu/bits/auxv.h
, eu posso ver issoEntão, eles estão tentando obter o nome do arquivo do executável - na verdade, o nome do caminho de acordo com os documentos e o exemplo abaixo. Nesse caso, esse é o nome do caminho do rastreador e não o destino. Eles estão ligando
realpath
para garantir que os caminhos sejam os mesmos. Você pode ver o quegetauxval()
,