我正在尝试找到线程task_struct
的地址。首先,我需要获取task_struct
的{{1}}的地址,然后迭代整个列表,最后得到特定线程的init_task
。 task_struct
的{{1}}可以通过命令从task_struct
轻松获得
init_task
。
当我使用较旧的内核版本(3.12)时,这是有效的。但是当我切换到更新的版本(4.5)时,这个想法在一开始就失败了。因为符号/proc/kallsyms
从grep "\<init_task\>" /proc/kallsyms
消失。但是当我检查源代码时,我可以看到导出符号init_task
(http://lxr.free-electrons.com/source/init/init_task.c?v=4.5#L18)。为什么它没有显示在/proc/kallsyms
中?或者是否有其他方法可以从用户空间程序中获取init_task
的地址?
答案 0 :(得分:0)
尝试使用CONFIG_KALLSYMS_ALL
选项集进行编译。没有它,kallsyms
似乎仅包含.text
和init.text
部分中的符号:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/link-vmlinux.sh#n152,https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/kallsyms.c#n250