TLTR

我想将Linux内核头文件vs.19加载到Ghidra,以便它可以识别内核结构和功能签名。

完整说明

我' m试图对Linux内核模块(内核版本4.19)进行逆向工程。
Ghidra可以正确识别所有函数名称,例如:openmisc_register等,但无法确定其确切签名。

让我们以带有签名的函数copy_from_user为例:

unsigned long copy_from_user (void *to, const void __user *from, unsigned long n);


,Ghidra的看法如下:

undefined _copy_from_user (void)


我相信这将不是我进行逆向工程的最后一个内核模块,因此我想学习如何将所有缺少的内核结构加载到程序中。

此外,我知道我可以手动编辑函数签名,但是随后我还需要手动添加大量结构(例如struct文件),这将非常无效。 br />
到目前为止我一直在尝试什么

(我对Ghidra还是超级新手,如果您知道更好的加载Linux内核头文件的方法,请分享。)

我从debian存储库中下载了标头:



$ wget linux-headers-4.19.0-6-common_4.19.67-2+deb10u2_all.deb .
$ ls
linux-headers-4.19.0-6-common_4.19.67-2+deb10u2_all.deb  usr
$ ls /usr/src/
linux-headers-4.19.0-6-common


我提取并复制了的全部内容所有文件都放入all_headers.h(Ghidra不想接受目录本身。我也找不到关于从Makefile加载文件的任何信息)



$ cat `find . | grep .h` > all_headers.h
$ cat all_headers.h | wc -c
29824650


我提供了all_headers.h进行解析,但是Ghidra仅添加了大约20个定义,并且没有函数签名。