1

祝大家有美好的一天。我有这个查询,我希望有人能够帮助我。我提前表示感谢和感谢。我已经进行了数小时的搜索,但无法找到解决方案。

我的问题:

我需要通过以下代码片段获取“security_task_create(clone_flags)”函数的地址(位于第 926 行,fork.c 根据“/usr/src/linux-2.6.27/kernel/fork.c”) - :

************************************ ************************************ 

static struct task_struct *copy_process(unsigned long clone_flags,
unsigned long stack_start,
struct pt_regs *regs,
unsigned long stack_size,
int __user *child_tidptr,
struct pid *pid,
int trace)

{

int retval;
struct task_struct *p;
int cgroup_callbacks_done = 0;

if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))
return ERR_PTR(-EINVAL);

/*
* Thread groups must share signals as well, and detached threads
* can only be started up within the thread group.
*/
if ((clone_flags & CLONE_THREAD) && !(clone_flags & CLONE_SIGHAND))
return ERR_PTR(-EINVAL);

/*
* Shared signal handlers imply shared VM. By way of the above,
* thread groups also imply shared VM. Blocking this case allows
* for various simplifications in other code.
*/
if ((clone_flags & CLONE_SIGHAND) && !(clone_flags & CLONE_VM))
return ERR_PTR(-EINVAL);

****retval = security_task_create(clone_flags);****
if (retval)
goto fork_out;

retval = -ENOMEM;
p = dup_task_struct(current);
if (!p)
goto fork_out;

rt_mutex_init_task(p);
************************************ ************************************ 

我在内核 3.1.7 的 Fedora Core 16 机器上启用了 KDB 访问。进入 KDB 控制台即“kdb[0]>”后,我输入了 security_task_create 并显示了一个十六进制地址,例如 0x0040118e。

我的问题:

  1. 显示的十六进制地址是内核加载时 security_task_create 的地址吗?

2.如果没有,如何获取security_task_create函数的地址?如何配置 KDB 以获取 security_task_create 函数的地址?

  1. 我想到的是当内核在内存中运行 security_task_create 时,使用 KDB 在 fork.c 的第 926 行插入一个断点。如果这确实是正确的解决方案,我如何使用这种方法获取 security_task_create 的地址?
4

2 回答 2

0

只需在您的源目录中 grep for printk,我相信您会找到大量示例。

printk(KERN_INFO "fork(): process `%s' used deprecated "
                    "clone flags 0x%lx\n",
                get_task_comm(comm, current),
                clone_flags & CLONE_STOPPED);
于 2013-12-26T19:27:31.830 回答
0

要获取内核中任何符号的地址,只需简单地使用System.map文件。

CONFIG_KALLSYMS需要在内核配置中启用以获取该文件中的所有符号。

于 2013-10-16T09:29:31.623 回答