SCANELF(1) Documentation for pax-utils SCANELF(1)

scanelf - ابزار فضای کاربری برای پویش فایل‌های ELF

scanelf [گزینه‌ها] ELFs یا دایرکتوری‌ها

scanelf یک ابزار فضای کاربری (user-space) برای پویش سریع فایل‌های مشخص‌شده ELF، دایرکتوری‌ها یا مسیرهای رایج سیستم به منظور استخراج اطلاعات گوناگون است. این اطلاعات می‌تواند شامل انواع ELF، نشانه‌گذاری‌های PaX، مقادیر TEXTREL و غیره باشد.

-A, --archives

پویش آرشیوها (فایل‌های a.)

-a, --all

چاپ تمام اطلاعات مفید و ساده

-B, --nobanner

عدم نمایش سرآیند (header)

-b, --bind

چاپ اطلاعات اتصال نمادها (lazy یا now)

-D, --endian

چاپ اندیاننس ELF (big/little/...)

-E, --etype ETYPE

چاپ صرفاً فایل‌های ELF منطبق با etype مشخص‌شده (مانند ET_DYN، ET_EXEC و غیره)

-e, --header

چاپ نشانه‌گذاری‌های GNU_STACK

-F, --format FORMAT

استفاده از قالب مشخص‌شده برای خروجی؛ برای اطلاعات بیشتر بخش قالب (FORMAT) را ببینید

-f, --from FILE

خواندن جریان ورودی از نام فایل مشخص‌شده

-g, --gmatch

استفاده از strncmp برای تطبیق کتابخانه‌ها (همراه با -N). یا استفاده از عبارت منظم برای تطبیق نماد

-h, --help

نمایش خلاصه نحوه استفاده و خروج

-I, --osabi

چاپ OSABI

-i, --interp

چاپ اطلاعات مفسر (.interp/PT_INTERP)

-k, --section SECTION

یافتن ELFهای دارای بخش مشخص‌شده. می‌تواند چندین بار برای تطبیق همزمان چند بخش مشخص شود. برای اطلاعات بیشتر بخش تطبیق بخش‌ها (SECTION MATCHING) را ببینید.

-L, --ldcache

استفاده از اطلاعات ld.so.cache (همراه با -r/-n)

-l, --ldpath

پویش تمام دایرکتوری‌های موجود در /etc/ld.so.conf

-M, --bits BITS

چاپ صرفاً فایل‌های ELF منطبق با بیت‌های عددی مشخص‌شده (مانند 32/64)

-m, --mount

عدم عبور بازگشتی از نقاط اتصال (mount points)

-N, --lib SONAME

یافتن ELFهایی که به SONAME مشخص‌شده نیاز دارند. می‌تواند چندین بار برای تطبیق همزمان چند SONAME مشخص شود. برای اطلاعات بیشتر بخش تطبیق SONAME مورد نیاز (NEEDED SONAME MATCHING) را ببینید.

-n, --needed

چاپ کتابخانه‌هایی که ELF به آن‌ها پیوند خورده است (DT_NEEDED)

-O, --perms PERMS

چاپ صرفاً فایل‌های ELF با بیت‌های اکتال مشخص‌شده منطبق (مانند 755)

-o, --file FILE

نوشتن جریان خروجی در نام فایل مشخص‌شده

-p, --path

پویش تمام دایرکتوری‌های موجود در متغیر محیطی PATH

-q, --quiet

فقط خروجی دادن موارد «بد» (bad)

-R, --recursive

پویش بازگشتی دایرکتوری‌ها

-r, --rpath

چاپ مسیرهای زمان اجرا که در ELF کدگذاری شده‌اند (DT_RPATH/DT_RUNPATH)

-S, --soname

چاپ نام کتابخانه اشتراکی ELF (DT_SONAME)

-s, --symbol SYMBOL

یافتن نماد مشخص‌شده؛ برای اطلاعات بیشتر بخش تطبیق نمادها (SYMBOL MATCHING) را ببینید

-T, --textrels

مکان‌یابی علت TEXTRELها از طریق objdump

-t, --textrel

چاپ اطلاعات TEXTREL

-V, --version

چاپ نگارش و خروج

-v, --verbose

پرگویی در خروجی (می‌تواند بیش از یک بار استفاده شود)

-X, --fix

تلاش برای «ترمیم» موارد بد (استفاده همراه با -r/-e)

-x, --pax

چاپ نشانه‌گذاری‌های PaX

-Y, --eabi

چاپ EABI (تنها برای چند معماری محدود اهمیت دارد)

-y, --symlink

عدم پویش پیوندهای نمادین (symlinks)

-Z, --size SIZE

چاپ اندازه فایل ELF

-z, --setpax FLAGS

تنظیم EI_PAX/PT_PAX_FLAGS روی فلگ‌های مشخص‌شده (استفاده همراه با -Xx)

--use-ldpath

استفاده از مسیرهای ld.so.conf برای یافتن مسیر کامل کتابخانه‌ها (همراه با --needed استفاده شود).

--root PATH

جستجو در درخت ریشه مشخص‌شده به‌جای /. معمولاً با گزینه‌هایی مانند -l یا -p همراه می‌شود. این گزینه به‌طور ضمنی با تمام مسیرهای مشخص‌شده در خط فرمان به عنوان مسیرهای نسبی نسبت به ریشه برخورد می‌کند، بنابراین اگر صریحاً ELFها را فهرست می‌کنید، حتماً آن را نادیده بگیرید.

--ldcache PATH

استفاده از مسیر مشخص‌شده به‌جای /etc/ld.so.cache. معمولاً با گزینه‌هایی مانند -L یا -n همراه می‌شود.

رشته قالب بسیار شبیه به یک رشته در printf است از این جهت که یک رشته متنی با فلگ‌هایی است که اطلاعات متفاوتی را درخواست می‌کنند. برای نمونه، می‌توانید از یک رشته قالب استفاده کنید و انتظار نتایج زیر را داشته باشید.

# scanelf -BF "file %f needs %n; funky time" /bin/bash
file bash needs libncurses.so.5,libdl.so.2,libc.so.6; funky time

توجه داشته باشید که هنگام استفاده از یک رشته قالب، به‌طور کلی فلگ‌های مرتبط با اطلاعات باید حذف شوند. به بیان دیگر، نمی‌توانید هم خروجی NEEDED (-n) را درخواست کنید و هم همزمان یک قالب خروجی مشخص نمایید، چرا که این عملیات‌ها مانعة‌الجمع هستند. هر فلگ مرتبط با اطلاعات دارای یک مشخص‌کننده تبدیل معادل است، بنابراین به‌جای آن‌ها از مشخص‌کننده‌ها استفاده کنید. البته می‌توانید همچنان به استفاده از فلگ‌های غیرمرتبط با اطلاعات (مانند --verbose) ادامه دهید.

سه نویسه وجود دارند که مشخص‌کننده‌های تبدیل را معرفی می‌کنند:

• % - جایگزینی با اطلاعات

•
# - تطبیق بولی خاموش (بدون خروجی)
•
+ - تطبیق همراه با جزئیات (verbose)

و تعدادی مشخص‌کننده تبدیل وجود دارد. ما تلاش می‌کنیم مشخص‌کننده را با گزینه متناظر تطبیق دهیم.

• a - نوع ماشین (EM)

•
b - فلگ‌های پیوند (bind)
•
e - سرآیندهای برنامه (program headers)
•
D - ترتیب بایت‌ها (endian)
•
I - osabi
•
Y - eabi
•
F - نام کامل فایل (مسیر طولانی)
•
f - نام کوتاه فایل
•
i - مفسر (interp)
•
k - بخش (section)
•
M - کلاس EI
•
N - needed مشخص‌شده
•
n - کتابخانه‌های مورد نیاز (needed)
•
p - نام فایل (بدون بخش جستجو)
•
o - نوع شیء (etype)
•
O - مجوزها (perms)
•
r - مسیرهای اجرا (runpaths)
•
S - SONAME
•
s - نماد (symbol)
•
T - تمامی textrelها
•
t - وضعیت textrel
•
x - فلگ‌های pax

رشته مشخص‌شده قالبی به صورت [%[modifiers]%][[+-]<symbol name>][,[.....]] دارد.

اگر symbol name خالی باشد، تمام نمادها مطابقت داده می‌شوند.

اگر symbol name یک الگوی glob ("*") باشد، تمام نمادها در قالب اشکال‌زدایی (debug) تخلیه می‌شوند. به ساختار این خروجی وابسته نباشید چرا که هر زمان لازم باشد تغییر می‌کند.

اگر نخستین کاراکتر نام نماد یک علامت مثبت ("+") باشد، فقط نمادهای تعریف‌شده (defined) تطبیق داده می‌شوند. اگر منفی ("-") باشد، تنها نمادهای تعریف‌نشده (undefined) تطبیق داده می‌شوند. منظور از «تعریف‌شده» این است که نماد در خود فایل ELF تعریف شده است، در مقابل داشتن یک ارجاع خارجی.

قرار دادن اصلاح‌کننده‌ها میان علامت‌های درصد ("%") امکان فیلترهای دقیق‌تر و عمیق‌تر را فراهم می‌سازد. گروه‌هایی از اصلاح‌کننده‌ها وجود دارند. اگر عضوی از یک گروه را مشخص نکنید، تمام انواع موجود در آن گروه مطابقت داده می‌شوند.

• گروه STT (نوع نماد)

•
n - STT_NOTYPE
•
o - STT_OBJECT
•
f - STT_FUNC
•
F - STT_FILE
•
گروه STB (اتصال نماد)
•
l - STB_LOCAL
•
g - STB_GLOBAL
•
w - STB_WEAK
•
گروه STV (دید نماد)
•
p - STV_DEFAULT
•
i - STV_INTERNAL
•
h - STV_HIDDEN
•
P - STV_PROTECTED
•
گروه SHN (سرآیند بخش)
•
d - تعریف‌شده
•
u - SHN_UNDEF
•
a - SHN_ABS
•
c - SHN_COMMON

می‌توانید با استفاده از ویرگول (",") برای جداسازی جستجوهای گوناگون، چندین نماد را همزمان جستجو کنید. هر نمادی که منطبق باشد نمایش داده می‌شود، در حالی که نمادهای نامنطبق نشان داده نخواهند شد.

می‌توانید با مشخص کردن نوع فایل شیء ELF (به صورت ETYPE) جستجوی خود را محدود نمایید. این گزینه خط فرمان مقدار عددی و یا نوع نمادین را می‌پذیرد. چندین مقدار می‌توانند با کاما جدا شده و ارسال گردند. مثال: -E ET_EXEC,ET_DYN,1

در اینجا فهرست استاندارد موجود آورده شده است. البته شما آزادید هر مقدار عددی که می‌خواهید را مشخص کنید.

• 0 - ET_NONE - نوع ناشناخته

•
1 - ET_REL - فایل قابل بازنشانی
•
2 - ET_EXEC - فایل اجرایی
•
3 - ET_DYN - شیء اشتراکی (shared object)
•
4 - ET_CORE - فایل هسته (core)

همچنین می‌توانید با مشخص کردن اندازه بیتی ELF جستجوی خود را محدود کنید. مجدداً، مقدار عددی یا شناسه نمادین را مشخص نمایید.

• 32 - ELFCLASS32 - فایل‌های ELF ۳۲ بیتی

•
64 - ELFCLASS64 - فایل‌های ELF ۶۴ بیتی

پیشوند ! تنها ELFهایی را نشان می‌دهد که بخش مشخص‌شده را ندارند.

پیشوند ! تنها ELFهایی را نشان می‌دهد که به کتابخانه مشخص‌شده وابسته نیستند.

https://wiki.gentoo.org/wiki/Hardened/PaX_Utilities

لطفاً تا حد امکان اطلاعات کامل (با استفاده از هرگونه گزینه اشکال‌زدایی موجود) را درج نموده و گزارش‌های باگ را برای نگه‌دارندگان ارسال کنید (بخش نویسندگان (AUTHORS) را ببینید). در صورت امکان لطفاً از Gentoo bugzilla در نشانی https://bugs.gentoo.org استفاده فرمایید.

chpax(1), dumpelf(1), paxctl(1), pspax(1), readelf(1), scanelf(1), elf(5)

Ned Ludd <solar@gentoo.org>

نگه‌دارنده

Mike Frysinger <vapier@gentoo.org>

نگه‌دارنده

Fabian Groffen <grobian@gentoo.org>

نگه‌دارنده Mach-O

1.
https://wiki.gentoo.org/wiki/Hardened/PaX_Utilities
2.
https://bugs.gentoo.org
08/02/2026 pax-utils 1.3.11