من در حال تلاش برای مهندسی معکوس یک ماژول هسته لینوکس (نسخه هسته 4.19 هسته) هستم.
Ghidra همه نامهای عملکردی را از قبیل: باز ، misc_register و غیره به درستی تشخیص می دهد ، اما نمی تواند امضاهای دقیق آنها را تعیین کند.

بیایید به عنوان نمونه از تابع copy_from_user با امضا استفاده کنیم: [19659003] ناموفق طولانی copy_from_user (باطل * به ، const void __user * از ، طولانی امضا نشده n)؛

و در اینجا نحوه دیدن غیدرا آمده است:

 تعریف نشده _copy_from_user (باطل)

من معتقدم که این آخرین ماژول هسته برای مهندس معکوس برای من نخواهد بود و بنابراین می خواهم یاد بگیرم که چگونه تمام ساختارهای هسته گم شده را به برنامه بارگذاری کنیم.

علاوه بر این ، من می دانم که می توانم امضای تابع را با دست ویرایش کنم ، اما باید ساختارهای زیادی را نیز با دست اضافه کنم (مانند پرونده ساختار) و این بسیار ناکارآمد خواهد بود.

تا کنون امتحان کردم

من هدرها را از مخازن دبیان بارگیری کردم:

 $ wget linux-headers-4.19.0-6-معمول_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-رایج است

من با مشخص کردن مسیر پوشه استخراج شده ، آنها را با استفاده از گزینه File >> Parse C Source بارگذاری کردم.

 توضیحات تصویر را در اینجا وارد کنید

و خطایی رخ داد. چه کاری می توانم انجام دهم تا گیدرا از امضاهای عملکرد صحیح آگاه شود؟