2013-10-28 15 views
-1

我試圖打印一個進程pgd和start_stack值,但是當我從每個進程的mm指針讀取值時遇到了問題。最終目標是創建一個LKM,它將通過這些進程並打印標題,pgd,stack_start和stack_canary值。我有一種感覺,我需要鎖定某些東西才能查看mm數據,但我無法找到我需要做的事情。任何幫助正確的方向將是非常有益的。以下代碼讀取過程信息:如何在linux中打印進程的pgd和stack_start值?

 void read_proc(){ 

    struct task_struct *p; 
    struct mm_struct *mm; 
    int len = 0; 

    for_each_process(p) { 
    task_lock(p); 
    mm = p->mm; 
    down_write(&mm->mmap_sem); 
    printk(KERN_INFO "Proc Q4: Name: %s Stack Canary: 0x%X Start Stack: 0x%X PGD: 
    0x%X\n",p->comm,p->stack_canary, mm->start_stack), mm->pgd->pgd); 
    up_write(&mm->mmap_sem); 
    task_unlock(p); 
    } 

} 
+0

經過一番研究,我想我需要鎖定任務並使用down_write,當我嘗試讀取mm - > [value]區域時,我的LKM鎖定了我的Linux機器。 – gndimitro

+0

當你參考毫米打印出來的值,做&(mm) – user979616

回答

0

並非進程列表中的每個進程都有一個毫米結構。在嘗試引用這些值之前,請嘗試測試mm是否爲空。

P.S. CPSC 457作業?

+0

哈哈是啊,我一直有意義補充說,作爲答案,好趕上 – gndimitro