STRIP(1) GNU Development Tools STRIP(1)

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....SH "توضیحات (DESCRIPTION)" ابزار strip گنو تمامی نمادها را از فایل‌های شیء objfile حذف می‌کند. فهرست فایل‌های شیء می‌تواند شامل بایگانی‌ها نیز باشد. حداقل یک فایل شیء باید مشخص شود.

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

با objfile اصلی به‌صورت فایلی با قالب کد شیء bfdname رفتار می‌کند و آن را با همان قالب بازنویسی می‌نماید.
خلاصه‌ای از گزینه‌های strip را نمایش داده و خارج می‌شود.
فهرستی شامل تمامی معماری‌ها و قالب‌های شیء موجود را نمایش می‌دهد.
با objfile اصلی به‌صورت فایلی با قالب کد شیء bfdname رفتار می‌کند.
فایل objfile را با فایلی در قالب خروجی bfdname جایگزین می‌کند.
هر بخشی با نام sectionname را علاوه بر بخش‌هایی که در هر صورت باید حذف شوند، از فایل خروجی حذف می‌کند. این گزینه می‌تواند بیش از یک‌بار مشخص شود. توجه داشته باشید که استفادهٔ نادرست از این گزینه ممکن است فایل خروجی را غیرقابل استفاده کند. نویسهٔ عامه‌پسند (wildcard) * می‌تواند در انتهای 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' را حذف نمی‌کند.

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

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

در حالت قطعیت‌پذیر (deterministic) عمل نکن. این برعکس گزینهٔ -D در بالا است: هنگام رونوشت‌برداری از اعضای آرشیو و نوشتن نمایهٔ آرشیو، از مقادیر واقعی UID، GID، برچسب زمانی (timestamp) و حالت فایل (file mode) آن‌ها استفاده می‌کند.

این حالت پیش‌فرض است، مگر اینکه 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 را نیز در خروجی حفظ می‌کند.

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

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

1.
فایل اجرایی را طبق معمول پیوند دهید. با فرض اینکه نام آن "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 ایجاد شده است.

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

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

اگر --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 با نویسه‌های فاصله از هم جدا می‌شوند. یک نویسهٔ فاصله می‌تواند با محصور کردن کل گزینه در علامت‌های نقل‌قول تکی یا دوتایی درون یک گزینه گنجانده شود. هر نویسه‌ای (از جمله ممیز وارونه) را می‌توان با پیشوند کردن یک ممیز وارونه به نویسهٔ مورد نظر، در آن قرار داد. خود file ممکن است حاوی گزینه‌های بیشتر @file باشد؛ چنین گزینه‌هایی به‌صورت بازگشتی پردازش خواهند شد..SH "همچنین ببینید (SEE ALSO)" مدخل‌های Info برای binutils.

کپی‌رایت (c) 1991-2026 Free Software Foundation, Inc.

اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه 1.3 یا هر نسخه بعدی منتشر شده توسط Free Software Foundation اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر (Invariant Sections)، بدون متون روی جلد (Front-Cover Texts)، و بدون متون پشت جلد (Back-Cover Texts). نسخه‌ای از این مجوز در بخشی با عنوان “GNU Free Documentation License” گنجانده شده است.

2026-08-31 binutils-2.47