من در حال تلاش برای مهندسی معکوس یک ماژول هسته لینوکس (نسخه هسته 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 بارگذاری کردم.
و خطایی رخ داد. چه کاری می توانم انجام دهم تا گیدرا از امضاهای عملکرد صحیح آگاه شود؟