2017-07-27 86 views
-1

我對模塊編碼很陌生,我需要運行一些在模塊中使用GMP庫的計算。內核中的GMP模塊

所以第一個問題:通常是可以在內核中運行GMP嗎? 爲了測試,我寫了這個模塊:

#include <linux/init.h> 
#include <linux/module.h> 
#include <gmp.h> 

int hallo_init(void) 
{ 
    mpz_t testFactor; 
    mpz_init(testFactor, NULL); 
    mpz_set_str(testFactor, "19", 10); 
    int length = (int) mpz_sizeinbase(testFactor,2); 

    printk(KERN_ALERT "That is testFactor: %x \n",length); 

    return 0; 
} 

void hallo_exit(void) 
{ 
    printk(KERN_ALERT "exit \n"); 
} 

module_init(hallo_init); 
module_exit(hallo_exit); 

我用下面的命令來運行它:

sudo make -C /lib/modules/$(uname -r)/build M=$PWD modules -lgmp 

生成文件由

obj-m := gmpFile.o 

我也試過用-lgmp在makefile中:

obj-m := halloGmp.o 
ccflags-y := -lgmp 

但我總是得到一個致命錯誤:gmp.h: No such file or directory 有什麼建議嗎?將感謝幫助!

+0

這顯然是一個XY問題。如果您有超量計算,請在用戶空間中執行它們,內核模塊應限制爲最低要求。作爲旁註:'%x'採用'unsigned',而不是'int' - >未定義的行爲。 – Olaf

+0

不幸的是,我不能在用戶空間中完成它們。最後,爲了分析某些連接的安全性,我想用我的實現來替換Encryption(ECDH),以及針對某種攻擊的對策。因此我需要在內核中運行我的代碼 – Balltasar

+0

還有其他一些測試加密的方法,例如通過使用原始套接字,保險絲等。無論如何,GMP不適用於加密算法。 – Olaf

回答

0

我對GMP並不熟悉,但不太可能將庫動態鏈接到內核模塊。

原因是內核是一個獨立的程序,不知道你使用的任何系統庫(如glib ...),很可能GMP使用這些庫。

我能想到的唯一解決方案是,您可以執行一個內核模塊,與用戶空間中的程序進行通信,並將GMP鏈接到應用程序的用戶區部分。