我的get_user()宏有問題。我所做的是如下:在內核模式下運行的Get_user返回錯誤
我運行下面的程序
int main()
{
int a = 20;
printf("address of a: %p", &a);
sleep(200);
return 0;
}
當程序運行時,它輸出的,比方說,0xbff91914地址。
然後我把這個地址傳遞給一個運行在內核模式下的模塊,它檢索這個地址的內容(當我這樣做的時候,我也確保了這個過程並沒有終止,因爲我把它放到了睡眠狀態200秒...):
地址首先作爲字符串發送,然後將它們轉換爲指針類型。
int * ptr = (int*)simple_strtol(buffer, NULL,16);
printk("address: %p",ptr); // I use this line to make sure the cast is correct. When running, it outputs bff91914, as expected.
int val = 0;
int res;
res= get_user(val, (int*) ptr);
但是,res總是不爲0,這意味着get_user返回錯誤。我想知道是什麼問題....
謝謝!
- 方凱
謝謝,現在我知道是什麼問題。但在我的項目中,我正在開發一個虛擬設備驅動程序,以便用戶可以通過指定其pid和虛擬地址來讀取任何進程的內存內容。因此,一個設備/ dev/gh被註冊,並且用戶嘗試執行如下操作:echo -n targetpid>/dev/gh&echo -n addr>/dev/gh因此,目標進程不能被修改。設備驅動程序將通過pid和虛擬地址檢索值並將其返回給用戶。我不知道如何用我的場景下的get_user解決這個問題。謝謝! – 2010-04-28 06:39:14