استفاده از ftrace برای بررسی توابع فراخوانی شده در کرنل لینوکس
به کمک دستور strace میتوان system callهایی که در اجرای برنامهها فراخوانی میشوند را بررسی نمود ولی امکان اطلاع پیدا کردن از توابعی که درون کرنل لینوکی فراخوانی میشوند وجود ندارد و به عنوان مثال نمیتوان متوجه شد که در خواندن یک فایل، از چه توابعی در چه ماژولی و یا چه سیستمفایلی استفاده میشود.
لینوکس به کمک قرار دادن یکسری point در بخشهایی از کرنل، مکانیزمی به اسم ftrace فراهم میکند که مشابه procfs پس از mount شدن، با فراهم کردن یکسری فایل، امکان بررسی توابعی کرنلی که در رویدادهای مختلف فراخوانی میشوند را در اختیار قرار میدهد.
از ftrace در حالتهای مختلفی میتوان استفاده نمود. مثلا میتوان فقط لیست توابعی که فراخوانی میشوند را مشاهده کرده و یا به صورت نمایش گرافی، کلیهی توابعی که با شروع از یک تابع یکی پس از دیگری فراخوانی میشوند را دیده و به این صورت مثلا متوجه شد که پس از تابع vfs_read که یک تابع برای پردازش درخواست خواندن از فایل در VFS لینوکس است، به سراغ تابع خواندن از ext4 میرسیم یا xfs.
یکی از دیگر کاربردهای ftrace که هم در توسعهی ابزارهای امنیتی کاربرد دارد و هم بدافزارها میتوانند از آن استفاده کنند پیادهسازی hooking برای توابع کرنل لینوکس است. در این روش ftrace در ابتدای فراخوانی تابع کرنلی، به سراغ اجرای تابعی که شما مشخص کردهاید رفته و پس از اتمام کار تابع شما، میتواند به چرخهی اصلی فراخوانی تابع کرنل بازگشته و آنرا تا انتها اجرا کند.
در این ویدئو کاربرد ftrace شرح داده شده و شیوههای مختلف استفاده از آن نمایش داده میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/AhxxT7lal5c
لینک ویدئو در آپارات:
https://aparat.com/v/acmv35h
#ShortLinuxInternals #linux #internals #kernel #tracing #ftrace
Post #125
4.1K