S.G*_*ami 2 linux process proc
可执行文件名为 linux 可以通过多种方式读取。
还有其他方式,比如读取/proc/[pid]/stat,或/proc/[pid]/status,但它们与1类似。
在第 1 点的情况下,proc(5)手册页说:
括号中的可执行文件的文件名。长度超过 TASK_COMM_LEN (16) 个字符(包括终止空字节)的字符串将被静默截断。无论可执行文件是否被换出,这都是可见的。
我有 3 个进程发现不匹配并突出显示它们(现在在我的系统上):
考虑这些情况:
/proc/7610/comm是Web Content/proc/7610/cmdline是
/opt/firefox-developer-edition/firefox-bin-contentproc-childID17-isForBrowser-prefsLen7837-prefMapSize238232-parentBuildID20201215185920-appdir/opt/firefox-developer-edition/browser4080truetab/proc/38193/comm是zyxwvutsrqponml/proc/38193/cmdline是/ramdisk/abcdefghijklmnopqrstuvwxyz./zyxwvutsrqponmlkjihgfedcba有一\u0000间ramdisk/abcdefghijklmnopqrstuvwxyz和./zyxwvutsrqponmlkjihgfedcba我能看到编程,我将其替换\s。
/proc/37030/comm是kworker/3:1-xfs-reclaim/sda2/proc/37030/cmdline为空。文件 comm 如何包含“kworker/3:1-xfs-reclaim/sda2”而不会被截断到 15 个位置(+ \n 为 16)?
我怎么知道它是否真的被截断了,就像第 2 点的情况一样?
唯一可靠的方法是 via /proc/PID/exe,即使可执行文件已被删除,它也能工作,或者它根本不存在(例如执行使用memfd_create()viafexecve()或execveat(AT_EMPTY_PATH).
双方/proc/PID/comm并/proc/PID/cmdline可以通过这个过程本身很容易伪造(通过前者prctl(PR_SET_NAME),后者刚刚通过覆盖argv[]字符串)。
文件如何
comm包含kworker/3:1-xfs-reclaim/sda2而不被截断到 15 个位置(+\n为 16)?
那是内核线程,而不是用户进程,并且适用不同的规则;-)
| 归档时间: |
|
| 查看次数: |
369 次 |
| 最近记录: |