Перевод: https://blog.csdn.net/weixin_34336526/article/details/92753890
CopyRight этот документ принадлежит Джонатану всего, свободно перепечатывать, пожалуйста , сохранить целостность документа перепечатки. В полном пути к процессу ядра Linux пути подобно ядру Windows, чтобы получить процесс получения путей, разнообразные методов. Однако из-за особенностей конструкции Linux не является хорошим способом получить прямой путь: процесс динамического исполнения, понятие не имеет физического местоположения, строго в концепции отдельной программы. Но если вы не можете получить полный путь к Linux Kernel обрабатывать? Не Ответ, конечно, нет. task_struct структура имеет суб-сегмент комм, который хранит название программы, но самым большим именем является 16 (Windows внутри EPROCESS ImageName 16, который первым выдвинул? !!), но не включает в себя имя пути. Приобретенный от task_struct базового пути полагаться на mm_struct этой структуры, из которой вы можете получить полный путь процесса. В ядре Linux, по моим личным методам контроля три вида их здесь. 1 по exe_file task_struct-> мм-> exe_file-> f_path доступен полный путь. Но такой подход имеет ограничения, ядро должно быть включено PROC_FS. Общий релиз, чтобы удалить эту опцию. Таким образом, в основном без перекомпиляции ядра не может быть использована, в противном случае машина будет стал. 2 с помощью arg_xxx памяти параметров процесса task_struct-> мм-> память для хранения параметров процесса между arg_start ~ arg_end, конечно, включает в себя полный путь к программе. Но такой подход имеет ограничение, общий выпуск, кажется, стер эту часть. Я могу получить в собственном собранном ядре, но релиз не будет в состоянии получить содержание. Вот очень странно. статической силы util_get_task_name (pid_t PID) если (имя) kfree (имя); 3 по vm_area_struct task_struct->mm->mmap,这里需要检查检查影射的内存是代码段属性(VM_EXECUTABLE)。获取的进程对应的程序的文件名称不包含路径。 要想获取全路径,需要向上查找父路径,最后拼凑起来全路径。 |
转载于:https://blog.51cto.com/laokaddk/694037