祝大家有美好的一天。我有这个查询,我希望有人能够帮助我。我提前表示感谢和感谢。我已经进行了数小时的搜索,但无法找到解决方案。
我的问题:
我需要通过以下代码片段获取“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。
我的问题:
- 显示的十六进制地址是内核加载时 security_task_create 的地址吗?
2.如果没有,如何获取security_task_create函数的地址?如何配置 KDB 以获取 security_task_create 函数的地址?
- 我想到的是当内核在内存中运行 security_task_create 时,使用 KDB 在 fork.c 的第 926 行插入一个断点。如果这确实是正确的解决方案,我如何使用这种方法获取 security_task_create 的地址?