我想将Linux内核头文件vs.19加载到Ghidra,以便它可以识别内核结构和功能签名。
完整说明
我' m试图对Linux内核模块(内核版本4.19)进行逆向工程。
Ghidra可以正确识别所有函数名称,例如:
open
,misc_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个定义,并且没有函数签名。