0
我有一個關於linux內核的項目。我們不能編譯linux內核,我們必須調用未導出的函數,但是這個函數可以在/proc/kallsyms中找到。(我們可以得到函數的地址)。但是我們不知道調用函數的具體方法。 請您幫我們解決問題嗎? 非常感謝。linux模塊調用函數,它位於/ proc/kallsyms但不導出
我有一個關於linux內核的項目。我們不能編譯linux內核,我們必須調用未導出的函數,但是這個函數可以在/proc/kallsyms中找到。(我們可以得到函數的地址)。但是我們不知道調用函數的具體方法。 請您幫我們解決問題嗎? 非常感謝。linux模塊調用函數,它位於/ proc/kallsyms但不導出
假設它是在內核本身的功能,而不是一個模塊,所有你需要做的是:
int (funcp *)(int param1, int param2, ...) = FUNCTION_ADDRESS;
funcp(param1, param2, ...);
如果這是一個模塊的東西是一點點困難,因爲你需要記錄偏移的函數從內核模塊加載地址的開始,在運行時從內核抓取加載地址並計算函數地址...
我試過你的方法,但有錯誤:調用的對象'funcp'不是一個函數。我以你提供的方式完成了。你能告訴我爲什麼這個錯誤?非常感謝你。 – ruby
這是我的錯,很抱歉。我沒有給你提供正確的語法。我編輯了我的回覆並現在糾正了它。 – gby
非常感謝。順便說一句,我還有一個問題:在/ proc/kallsyms我們可以得到函數的地址,但是地址有t或T類型。如果類型是t,我們可以通過上面提到的方式調用函數嗎? – ruby