>当我知道System.map或/ proc / kallsyms中符号的地址时.
>当我知道符号的名称并想要在检索它时使用kallsyms_lookup_name.
我目前知道如何劫持系统调用,这需要声明类似的东西
asmlinkage <return_type> (*<name_for_system_call>)(<the types of the its arguments separated by commas>);
是否会使用这样的东西?在https://stackoverflow.com/a/32968387/1953537回答另一个问题,海报提供的例子是
#include <linux/kallsyms.h>static voID (*machine_power_off_p)(voID);machine_power_off = (voID*) kallsyms_lookup_name("machine_power_off");
但是如果符号返回指针怎么办?我会在(* machine_power_off_p)的左边放一个星号吗?
解决方法 #include< linux / fs.h>声明extern struct filename * getname(const char __user *);.指向此函数的指针的类型为struct filename *(*)(const char __user *).如果声明该类型的变量,则变量名称位于* in(*)之后.因此,您可以声明该类型的变量,并将kallsyms_lookup_name(“getname”)的返回值分配给它,如下所示:static struct filename *(*getname_p)(const char __user *);getname_p = (struct filename *(*)(const char __user *)) kallsyms_lookup_name("getname");
对于您想要使用数字地址的其他情况,只需将kallsyms_lookup_name函数调用替换为实际数字(kallsyms_lookup_name无论如何都将符号值作为数字返回).
总结以上是内存溢出为你收集整理的如何访问内核模块中的任何内核符号?全部内容,希望文章能够帮你解决如何访问内核模块中的任何内核符号?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)