在/ proc / kallsyms中找不到init_task符号(内核4.5.4-1-ARCH)

时间:2016-06-09 09:45:31

标签: linux-kernel symbols

我正在尝试找到线程task_struct的地址。首先,我需要获取task_struct的{​​{1}}的地址,然后迭代整个列表,最后得到特定线程的init_tasktask_struct的{​​{1}}可以通过命令从task_struct轻松获得

init_task

当我使用较旧的内核版本(3.12)时,这是有效的。但是当我切换到更新的版本(4.5)时,这个想法在一开始就失败了。因为符号/proc/kallsymsgrep "\<init_task\>" /proc/kallsyms消失。但是当我检查源代码时,我可以看到导出符号init_taskhttp://lxr.free-electrons.com/source/init/init_task.c?v=4.5#L18)。为什么它没有显示在/proc/kallsyms中?或者是否有其他方法可以从用户空间程序中获取init_task的地址?

1 个答案:

答案 0 :(得分:0)

尝试使用CONFIG_KALLSYMS_ALL选项集进行编译。没有它,kallsyms似乎仅包含.textinit.text部分中的符号:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/link-vmlinux.sh#n152https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/kallsyms.c#n250