STRIP(1) GNU Development Tools STRIP(1)

aarch64-linux-gnu-strip - حذف نمادها و سایر داده‌ها از فایل‌های شیء

strip [-F bfdname |--target=bfdname]
[-I bfdname |--input-target=bfdname]
[-O bfdname |--output-target=bfdname]
[-s|--strip-all]
[-S|-g|-d|--strip-debug]
[--strip-dwo]
[-K symbolname|--keep-symbol=symbolname]
[-M|--merge-notes][--no-merge-notes]
[-N symbolname |--strip-symbol=symbolname]
[-w|--wildcard]
[-x|--discard-all] [-X |--discard-locals]
[-R sectionname |--remove-section=sectionname]
[--keep-section=sectionpattern]
[--remove-relocations=sectionpattern]
[--strip-section-headers]
[-o file] [-p|--preserve-dates]
[-D|--enable-deterministic-archives]
[-U|--disable-deterministic-archives]
[--keep-section-symbols]
[--keep-file-symbols]
[--only-keep-debug]
[--plugin name]
[-v |--verbose] [-V|--version]
[--help] [--info]
objfile...

ابزار strip گنو تمامی نمادها را از فایل‌های شیء objfile حذف می‌کند. فهرست فایل‌های شیء می‌تواند شامل آرشیوها باشد. حداقل یک فایل شیء باید مشخص شود.

دستور strip فایل‌های مشخص‌شده در آرگومان‌هایش را تغییر می‌دهد، نه اینکه رونوشت‌های تغییریافته را با نام‌های متفاوتی ذخیره کند.

فایل شیء اصلی objfile را به‌عنوان فایلی با قالب کد شیء bfdname در نظر می‌گیرد و آن را در همان قالب بازنویسی می‌کند.
خلاصه‌ای از گزینه‌های strip را نمایش می‌دهد و خارج می‌شود.
فهرستی را نمایش می‌دهد که تمام معماری‌ها و قالب‌های شیء موجود را نشان می‌دهد.
فایل شیء اصلی objfile را به‌عنوان فایلی با قالب کد شیء bfdname در نظر می‌گیرد.
فایل objfile را با فایلی در قالب خروجی bfdname جایگزین می‌کند.
علاوه بر بخش‌هایی که در غیر این صورت حذف می‌شدند، هر بخش با نام sectionname را از فایل خروجی حذف می‌کند. این گزینه می‌تواند بیش از یک بار مشخص شود. توجه داشته باشید که استفاده نادرست از این گزینه ممکن است فایل خروجی را غیرقابل استفاده کند. نویسه عام * می‌تواند در انتهای sectionname قرار گیرد. در این صورت، هر بخشی که با sectionname شروع شود حذف خواهد شد.

اگر نخستین نویسه sectionpattern علامت تعجب (!) باشد، بخش‌های منطبق حذف نخواهند شد، حتی اگر استفاده قبلی از --remove-section در همان خط فرمان موجب حذف آن‌ها می‌شد. برای مثال:

--remove-section=.text.* --remove-section=!.text.foo

تمام بخش‌های منطبق بر الگوی '.text.*' را حذف می‌کند، اما بخش '.text.foo' را حذف نخواهد کرد.

هنگام حذف بخش‌ها از فایل خروجی، بخش‌هایی را که با sectionpattern مطابقت دارند حفظ می‌کند.
اطلاعات بازآدرس‌دهی (relocations) را برای هر بخشی که با sectionpattern مطابقت دارد از فایل خروجی حذف می‌کند. این گزینه می‌تواند بیش از یک بار مشخص شود. توجه داشته باشید که استفاده نادرست از این گزینه ممکن است فایل خروجی را غیرقابل استفاده کند. نویسه‌های عام در sectionpattern پذیرفته می‌شوند. برای مثال:
--remove-relocations=.text.*

اطلاعات بازآدرس‌دهی را برای تمام بخش‌های منطبق بر الگوی '.text.*' حذف خواهد کرد.

اگر نخستین نویسه sectionpattern علامت تعجب (!) باشد، اطلاعات بازآدرس‌دهی بخش‌های منطبق حذف نخواهد شد، حتی اگر استفاده قبلی از --remove-relocations در همان خط فرمان موجب حذف آن بازآدرس‌دهی‌ها می‌شد. برای مثال:

--remove-relocations=.text.* --remove-relocations=!.text.foo

اطلاعات بازآدرس‌دهی تمام بخش‌های منطبق بر الگوی '.text.*' را حذف می‌کند، اما بازآدرس‌دهی‌های بخش '.text.foo' را حذف نخواهد کرد.

هدرهای بخش‌ها را حذف می‌کند. این گزینه مختص فایل‌های ELF است. مستلزم --strip-all و --merge-notes می‌باشد.
تمام نمادها را حذف می‌کند.
فقط نمادهای اشکال‌زدایی را حذف می‌کند.
محتوای تمام بخش‌های DWARF .dwo را حذف کرده و بخش‌های اشکال‌زدایی باقیمانده و تمام نمادها را دست‌نخورده باقی می‌گذارد. برای اطلاعات بیشتر، توضیحات این گزینه را در بخش objcopy مشاهده کنید.
علاوه بر نمادهای اشکال‌زدایی و بخش‌های حذف‌شده توسط --strip-debug، تمام نمادهایی را که برای پردازش بازآدرس‌دهی مورد نیاز نیستند حذف می‌کند.
هنگام حذف نمادها، نماد symbolname را حفظ می‌کند، حتی اگر در حالت عادی حذف می‌شد. این گزینه می‌تواند بیش از یک بار مشخص شود.
برای فایل‌های ELF، تلاش می‌کند (یا تلاش نمی‌کند) تا با حذف یادداشت‌های تکراری، اندازه بخش‌های نوع SHT_NOTE را کاهش دهد. حالت پیش‌فرض تلاش برای این کاهش است، مگر اینکه اطلاعات اشکال‌زدایی یا DWO در حال حذف باشند.
نماد symbolname را از فایل مبدا حذف می‌کند. این گزینه می‌تواند بیش از یک بار مشخص شود و می‌تواند با گزینه‌های strip به غیر از -K ترکیب شود.
خروجی پیراسته‌شده را به جای جایگزینی فایل موجود، در file قرار می‌دهد. هنگامی که این آرگومان استفاده می‌شود، تنها یک آرگومان objfile می‌تواند مشخص شود.
تاریخ‌های دسترسی و تغییر فایل را حفظ می‌کند.
در حالت معین (deterministic) عمل می‌کند. هنگام کپی کردن اعضای آرشیو و نوشتن نمایه آرشیو، برای UIDها، GIDها و برچسب‌های زمانی از صفر استفاده می‌کند و برای تمام فایل‌ها از حالت‌های فایل (file modes) سازگار و یکدست استفاده می‌نماید.

اگر binutils با --enable-deterministic-archives پیکربندی شده باشد، این حالت به‌طور پیش‌فرض فعال است. می‌توان آن را با گزینه -U در زیر غیرفعال کرد.

در حالت معین عمل نمی‌کند. این معکوس گزینه -D در بالا است: هنگام کپی کردن اعضای آرشیو و نوشتن نمایه آرشیو، از مقادیر واقعی UID، GID، برچسب زمانی و حالت فایل استفاده می‌کند.

این حالت پیش‌فرض است مگر اینکه binutils با --enable-deterministic-archives پیکربندی شده باشد.

اجازه استفاده از عبارت‌های منظم (regular expressions) را در symbolnameهای به‌کاررفته در سایر گزینه‌های خط فرمان می‌دهد. عملگرهای علامت سوال (?)، ستاره (*)، بک‌اسلش (\) و قلاب‌ها ([]) را می‌توان در هر کجای نام نماد استفاده کرد. اگر نخستین نویسه نام نماد علامت تعجب (!) باشد، رفتار سوئیچ برای آن نماد معکوس می‌شود. برای مثال:
-w -K !foo -K fo*

باعث می‌شود strip فقط نمادهایی را که با حروف "fo" شروع می‌شوند نگه دارد، اما نماد "foo" را حذف کند.

نمادهای غیرسراسری (non-global) را حذف می‌کند.
نمادهای محلی تولیدشده توسط کامپایلر را حذف می‌کند. (این نمادها معمولاً با L یا . شروع می‌شوند.)
هنگام پیراستن یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، هر نمادی را که نام بخش‌ها را مشخص می‌کند و در غیر این صورت حذف می‌شد، حفظ می‌کند.
هنگام پیراستن یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، هر نمادی را که نام فایل‌های منبع را مشخص می‌کند و در غیر این صورت حذف می‌شد، حفظ می‌کند.
یک فایل را می‌پیراید و محتوای بخش‌هایی را که توسط --strip-debug حذف نمی‌شدند خالی می‌کند، و بخش‌های اشکال‌زدایی را دست‌نخورده باقی می‌گذارد. در فایل‌های ELF، این گزینه تمام بخش‌های یادداشت (note sections) را نیز در خروجی حفظ می‌کند.

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

هدف این است که این گزینه در ترکیب با --add-gnu-debuglink برای ایجاد یک فایل اجرایی دو بخشی استفاده شود: یکی یک باینری پیراسته‌شده که فضای کمتری در حافظه RAM و در توزیع اشغال می‌کند، و دومی یک فایل حاوی اطلاعات اشکال‌زدایی که تنها در صورت نیاز به قابلیت‌های اشکال‌زدایی لازم است. مراحل پیشنهادی برای ایجاد این فایل‌ها به شرح زیر است:

1.
فایل اجرایی را به‌طور معمول پیوند (link) دهید. با فرض اینکه نام آن "foo" باشد، سپس...
2.
دستور "objcopy --only-keep-debug foo foo.dbg"; را اجرا کنید تا فایلی حاوی اطلاعات اشکال‌زدایی ایجاد شود.
3.
دستور "strip --strip-debug foo"; را اجرا کنید تا یک فایل اجرایی پیراسته‌شده ایجاد شود.
4.
دستور "objcopy --add-gnu-debuglink=foo.dbg foo"; را اجرا کنید تا پیوندی به اطلاعات اشکال‌زدایی به فایل اجرایی پیراسته‌شده اضافه شود.

توجه --- انتخاب ".dbg" به‌عنوان پسوند فایل اطلاعات اشکال‌زدایی اختیاری است. همچنین مرحله "--only-keep-debug" اختیاری است. در عوض می‌توانید این کار را انجام دهید:

1.
فایل اجرایی را به‌طور معمول پیوند دهید.
2.
"foo" را به "foo.full" کپی کنید.
3.
دستور "strip --strip-debug foo"; را اجرا کنید.
4.
دستور "objcopy --add-gnu-debuglink=foo.full foo"; را اجرا کنید.

به این معنی که فایلی که توسط --add-gnu-debuglink به آن اشاره می‌شود می‌تواند همان فایل اجرایی کامل باشد و نیازی نیست حتماً فایلی باشد که توسط سوئیچ --only-keep-debug ایجاد شده است.

توجه --- این سوئیچ تنها برای استفاده در فایل‌های کاملاً پیوندیافته (fully linked) در نظر گرفته شده است. استفاده از آن روی فایل‌های شیء که اطلاعات اشکال‌زدایی در آن‌ها ممکن است ناقص باشد منطقی نیست. علاوه بر این، قابلیت gnu_debuglink در حال حاضر تنها از وجود یک نام فایل حاوی اطلاعات اشکال‌زدایی پشتیبانی می‌کند، نه چندین نام فایل بر اساس هر فایل شیء.

پلاگینی با نام name را برای افزودن پشتیبانی از انواع هدف‌های بیشتر بارگذاری می‌کند. این گزینه تنها در صورتی در دسترس است که زنجیره ابزار با فعال بودن پشتیبانی از پلاگین ساخته شده باشد.

اگر --plugin مشخص نشده باشد، اما پشتیبانی از پلاگین فعال باشد، آن‌گاه strip فایل‌های موجود در ${libdir}/bfd-plugins را به ترتیب حروف الفبا بررسی کرده و از اولین پلاگینی که شیء مورد نظر را بپذیرد استفاده می‌کند.

لطفاً توجه داشته باشید که این پوشه جستجوی پلاگین، همان پوشه مورد استفاده توسط گزینه -plugin ابزار ld نیست. برای این‌که strip بتواند از پلاگین پیونددهنده استفاده کند، آن پلاگین باید در پوشه ${libdir}/bfd-plugins کپی شود. برای کامپایل‌های مبتنی بر GCC، پلاگین پیونددهنده liblto_plugin.so.0.0.0 نام دارد. برای کامپایل‌های مبتنی بر Clang، این پلاگین LLVMgold.so نامیده می‌شود. پلاگین GCC همیشه با نسخه‌های پیشین سازگار است، بنابراین کپی کردن جدیدترین نسخه کافی خواهد بود.

شماره نسخه strip را نمایش می‌دهد.
خروجی با جزئیات: تمام فایل‌های شیء اصلاح‌شده را فهرست می‌کند. در مورد آرشیوها، strip -v تمام اعضای آرشیو را فهرست می‌نماید.
@file
گزینه‌های خط فرمان را از file می‌خواند. گزینه‌های خوانده‌شده به جای گزینه اصلی @file درج می‌شوند. اگر file وجود نداشته باشد یا قابل خواندن نباشد، با گزینه به‌صورت لفظی رفتار می‌شود و حذف نخواهد شد.

گزینه‌ها در file با نویسه‌های فاصله خالی (whitespace) جدا می‌شوند. یک نویسه فاصله خالی می‌تواند با محصور کردن کل گزینه در نقل‌قول‌های تکی یا دوتایی درون یک گزینه گنجانده شود. هر نویسه‌ای (از جمله بک‌اسلش) می‌تواند با پیشوند کردن یک بک‌اسلش به آن درج گردد. پرونده file خود می‌تواند شامل گزینه‌های @file بیشتری باشد؛ هر یک از این گزینه‌ها به‌صورت بازگشتی پردازش خواهند شد.

مدخل‌های Info برای binutils.

حق نشر (c) ۱۹۹۱-۲۰۲۶ Free Software Foundation, Inc.

مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه بعدی منتشر شده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. نسخه‌ای از این مجوز در بخشی با عنوان "GNU Free Documentation License" گنجانده شده است.

2026-07-30 binutils-2.47