内核中的GMP模块
问题描述:
我对模块编码很陌生,我需要运行一些在模块中使用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
有什么建议吗?将感谢帮助!
答
我对GMP并不熟悉,但不太可能将库动态链接到内核模块。
原因是内核是一个独立的程序,不知道你使用的任何系统库(如glib ...),很可能GMP使用这些库。
我能想到的唯一解决方案是,您可以执行一个内核模块,与用户空间中的程序进行通信,并将GMP链接到应用程序的用户区部分。
这显然是一个XY问题。如果您有超量计算,请在用户空间中执行它们,内核模块应限制为最低要求。作为旁注:'%x'采用'unsigned',而不是'int' - >未定义的行为。 – Olaf
不幸的是,我不能在用户空间中完成它们。最后,为了分析某些连接的安全性,我想用我的实现来替换Encryption(ECDH),以及针对某种攻击的对策。因此我需要在内核中运行我的代码 – Balltasar
还有其他一些测试加密的方法,例如通过使用原始套接字,保险丝等。无论如何,GMP不适用于加密算法。 – Olaf