我有一个可加载的内核模块,它的init如下所示
static int __init id_init(void)
{
struct identity *temp;
/* some code which is not relevant to the question */
temp = identity_find(3);
pr_debug("id 3 = %s\n", temp->name);
temp = identity_find(42);
if (temp == NULL)
pr_debug("id 42 not found\n");
/* some code which is not relevant to the question */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我也在我正在使用的内核版本上启用了动态调试 - 即CONFIG_DYNAMIC_DEBUG=y.
而在模块的Makefile文件我已经添加了一行CFLAGS_[id].o := -DDEBUG这里id.c是文件名.
现在我检查/sys/kernel/debug/dynamic_debug/control了这个模块的insmod之后,我在其中找到了下面的行
/home/pauldc/Programming/Kernel/id/id.c:69 [id]id_init =_ "id 42 not found\012"
/home/pauldc/Programming/Kernel/id/id.c:65 [id]id_init =_ "id 3 …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到内核地址空间,我的可加载内核模块由insmod重新定位.
我开始知道通过在修改模块时使用-m,-O开关,我们只能从模块的视点看到符号表和可执行文件的部分地址,而不是它们的重定位地址,因为我们做insmod时进行搬迁过程.
任何人都可以告诉如何在内核内存中找到模块的重定位地址,即加载模块所在的内核中绑定的地址?
谢谢!
PS请注意我使用的是Redhat 2.4 Linux内核,其中/ proc/modules列表没有显示已加载模块的虚拟地址.