2013-10-20 91 views
0

我有一個掛鉤讀取系統調用的內核模塊。我必須做的一件事就是捕捉正在執行由我的老師提交的外部程序的系統調用的內容。掛鉤讀取系統調用

隨着strace的,我能看到我的老師的計劃是做閱讀:

read(6, "\v\0\0\0\tExercise1", 14) 

而且讀掛鉤工作,問題是,我不知道怎麼讀來自新讀取函數內部的內容,因爲如果我正確* buf是空的並且在調用原始系統調用讀取之前未被填充。所以,理論上我應該直接從文件描述符中讀取,但不使用讀取系統調用,我不知道該怎麼做。

任何想法?謝謝!

+0

你能告訴我們你的掛鉤模塊的代碼嗎? – Michael

回答

1

基本上,你的鉤子函數應該是這樣的:

size_t my_hooked_read(int fildes, void *buf, size_t nbytes) 
{ 
    size_t ret; 

    //Do something before original call 

    ret = original_read(fildes, buf, nbytes); //call the original read ! 

    //Do something after original call 
    //buf is correctly filled here ! 

    return ret; 
} 

如果你想讀的buf內容,原來的呼叫後閱讀。

+0

謝謝邁克爾,但掛鉤功能不是問題,或多或少正是你的功能。我的問題位於://在原始調用之前做一些事情。 我想要做的是讀取buf ...但理論上是空的,因爲讀取系統調用沒有完成,所以我應該讀取文件描述符的內容。問題是我不知道該怎麼做。 – user1042850

+0

是否有任何理由說明爲什麼在原始調用後沒有讀取緩衝區**?內核模塊可以使用 – Michael

+0

嗎?從理論上講,我應該閱讀,因爲我們正在研究... – user1042850