Ghidra 加载 Linux 内核函数签名

逆向工程 吉德拉
2021-06-16 11:35:08

TLTR

我想将 Linux 内核头文件 vs. 4.19 加载到 Ghidra,以便它识别内核结构和函数签名。

详细描述

我正在尝试对 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)

我相信它不会是我逆向工程的最后一个内核模块,所以我想学习如何将所有丢失的内核结构加载到程序中。

此外,我知道我可以手动编辑函数签名,但是我还需要手动添加大量结构(例如结构文件),这将非常无效。

到目前为止我尝试过的

(我是 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 个定义并且没有函数签名。

在此处输入图片说明

在此处输入图片说明

0个回答
没有发现任何回复~