全てにおいて良い日。誰かが私を助けてくれることを願っています。事前に感謝の意を表します。何時間も検索しましたが、解決策を見つけることができませんでした。
私の問題:
「security_task_create(clone_flags)」関数のアドレスを取得する必要があります。次のコード スニペット (「/usr/src/linux-2.6.27/kernel/fork.c」に従って、926 行目、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 などの 16 進アドレスが表示されます。
私の質問:
- 表示されている 16 進アドレスは、カーネルがロードされたときの security_task_create のアドレスですか?
2.ない場合、security_task_create 関数のアドレスを取得するにはどうすればよいですか? security_task_create 関数のアドレスを取得するように KDB を構成するにはどうすればよいですか?
- 私が念頭に置いているのは、カーネルがメモリ内で security_task_create を実行するときに、KDB を使用して fork.c の 926 行目にブレークポイントを挿入することです。それが本当に適切な解決策である場合、そのような方法を使用して security_task_create のアドレスを取得するにはどうすればよいですか?