Strace

可以使用 getauxval 來確定您是否被追踪嗎?

  • January 4, 2018

離開這個問題後,我修補了我的核心以尋求在 Linux 上啟動 SQL Server 2017。現在我走得更遠,但我被關閉了,

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) ---

我相信在檢查之後proc,SQL Server 會做一些其他的巫術來做與回退相同的事情,只是為了“額外安全”,沒有人試圖讓他們的軟體工作。

現在,我想知道是否getauxval(3)可以用來確定是否正在跟踪程序?似乎CAPABILITIES表明這是可能的,CAP_SYS_ADMIN並且CAP_SYS_PTRACE

我相信第一個論點GETAUXVAL()說明了什麼,

getauxval(31, 9, 5, 0x7fe0d034ea67)

打開/usr/include/x86_64-linux-gnu/bits/auxv.h一看就知道了

#define AT_EXECFN       31              /* Filename of executable.  */

所以他們試圖獲取執行檔的文件名——實際上是每個文件的路徑名和下面的範例。在這種情況下,這是跟踪器的路徑名,而不是目標。然後他們打電話realpath來確保路徑是相同的。你可以看到什麼getauxval()

$ LD_SHOW_AUXV=1 strace sleep 1
AT_SYSINFO_EHDR: 0x7ffd6d96f000
AT_HWCAP:        bfebfbff
AT_PAGESZ:       4096
AT_CLKTCK:       100
AT_PHDR:         0x5640b6cad040
AT_PHENT:        56
AT_PHNUM:        9
AT_BASE:         0x7fc9ce4fc000
AT_FLAGS:        0x0
AT_ENTRY:        0x5640b6d09440
AT_UID:          1000
AT_EUID:         1000
AT_GID:          1000
AT_EGID:         1000
AT_SECURE:       0
AT_RANDOM:       0x7ffd6d909669
AT_HWCAP2:       0x0
AT_EXECFN:       /usr/bin/strace
AT_PLATFORM:     x86_64

引用自:https://unix.stackexchange.com/questions/414621