0

システム タップを使用してソース コード フローを理解したかったのですが、kernel.statement プローブ関数を使用してローカル変数にアクセスしようとしたため、ポインターを除く他のすべての変数が表示されます。

probe module("Module_Path/proc_rw.ko").statement("my_write@Module Src Path/proc_rw.c+9")
{
    printf("local = %s\n", $$locals)
}


Module Code :
static ssize_t my_write(struct file *f, const char __user *buf, size_t len, loff_t *off)
{
        pid_t pid;
        int ret;
        struct task_struct *task_local;
        int *i;       
        ret=copy_from_user(c, buf, len);
        i=&ret;
        pid=simple_strtol(buf, NULL, 10);
        task_local=pid_task(find_vpid(pid), PIDTYPE_PID);
        return len;
}

上記の stap コードを実行すると、

local = pid=0xf98 ret=0x0 task_local=? 私=?

task_local と i の値が出力されない理由を理解するのに役立ちます。

よろしく、ヤシュ。

4

1 に答える 1