Linux kernel 在/proc/kallsyms(内核4.5.4-1-ARCH)中找不到init_任务符号
我正在尝试查找线程的Linux kernel 在/proc/kallsyms(内核4.5.4-1-ARCH)中找不到init_任务符号,linux-kernel,symbols,Linux Kernel,Symbols,我正在尝试查找线程的task\u struct的地址。首先,我需要得到init\u task的task\u struct的地址,然后我迭代整个列表,最后得到特定线程的task\u struct。可以通过以下命令从/proc/kallsyms轻松获取init_任务的task_结构 grep“\”/proc/kallsyms 当我使用较旧的内核版本(3.12)时,这就起作用了。但当我切换到新版本(4.5)时,这个想法一开始就失败了。因为符号init_task从/proc/kallsyms中消失。但是
task\u struct
的地址。首先,我需要得到init\u task
的task\u struct
的地址,然后我迭代整个列表,最后得到特定线程的task\u struct
。可以通过以下命令从/proc/kallsyms
轻松获取init_任务的task_结构
grep“\”/proc/kallsyms
当我使用较旧的内核版本(3.12)时,这就起作用了。但当我切换到新版本(4.5)时,这个想法一开始就失败了。因为符号init_task
从/proc/kallsyms
中消失。但是当我检查源代码时,我可以看到符号init_task
已导出()。为什么它不显示在/proc/kallsyms
中?或者有没有其他方法可以从用户空间程序中获取init_task
的地址 尝试使用CONFIG\u KALLSYMS\u ALL
选项集编译。如果没有它,kallsyms
似乎只包含.text
和init.text
部分中的符号:,尝试使用CONFIG\u kallsyms\u ALL
选项集进行编译。没有它,kallsyms
似乎只包含.text
和init.text
部分的符号:,您的机器的体系结构是什么?有可能是IA64吗?另外,请查看内核.CONFIG
中的CONFIG\u ARCH\u INIT\u TASK
是否设置为y
。否,我的机器是x86\u 64。我当前版本(4.5)的内核配置文件没有config\u ARCH\u INIT\u TASK
选项。我还检查了旧内核版本(3.12)的.config
文件,它导出了init_task
符号,也没有这样的选项。问题似乎不是因为.config
文件-:((你能在你的.config
中为新内核检查下两个选项吗:config\u UNUSED\u SYMBOLS
和TRIM\u UNUSED\u KSYMS
?它们中的一些不太可能被启用,但是如果是的话——这可能是原因。是的,新内核有config\u UNUSED\u SYMBOLS=y
,但是没有找到TRIM\u UNUSED\u KSYMS
选项。对我来说理解,启用CONFIG_UNUSED_SYMBOLS
选项将导出未使用的符号,这意味着如果未使用init_任务
,它将被导出。因此,这似乎不是原因。或者我误解了吗?是的,您的理解是正确的。我只看到了您丢失init_任务()
symbol:1.如果CONFIG\u ARCH\u INIT\u TASK=y
2.CONFIG\u TRIM\u UNUSED\u KSYMS=y
并且内核中没有使用符号。可能还有其他机制可以去除未使用的符号,但我不知道。您的机器的体系结构是什么?有没有可能是IA64?另外,看看CONFIG\u ARCH\INIT_TASK
在内核.config
中设置为y
。不,我的机器是x86_64。我当前版本(4.5)的内核配置文件没有config_ARCH_INIT_TASK
选项。我还检查了旧内核版本(3.12)的.config
文件其中导出了init_task
符号,也没有这样的选项。问题似乎不是因为.config
文件-:((你能在你的.config
中为新内核检查下两个选项吗:config\u UNUSED\u SYMBOLS
和TRIM\u UNUSED\u KSYMS
?它们中的一些不太可能被启用,但是如果是的话——这可能是原因。是的,新内核有config\u UNUSED\u SYMBOLS=y
,但是没有找到TRIM\u UNUSED\u KSYMS
选项。对我来说理解,启用CONFIG_UNUSED_SYMBOLS
选项将导出未使用的符号,这意味着如果未使用init_任务
,它将被导出。因此,这似乎不是原因。或者我误解了吗?是的,您的理解是正确的。我只看到了您丢失init_任务()
symbol:1.如果CONFIG\u ARCH\u INIT\u TASK=y
2.CONFIG\u TRIM\u UNUSED\u KSYMS=y
并且在内核中没有使用符号。可能还有其他机制可以去除未使用的符号,但我不知道。