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...

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

دستور 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 است.
تمامی نمادها را حذف می‌کند..IP -g 4
تنها نمادهای اشکال‌زدایی را حذف می‌کند.
محتوای تمام بخش‌های DWARF .dwo را حذف کرده و بخش‌های اشکال‌زدایی باقی‌مانده و تمام نمادها را دست‌نخورده باقی می‌گذارد. برای اطلاعات بیشتر، به توضیحات این گزینه در بخش objcopy مراجعه کنید.
علاوه بر نمادها و بخش‌های اشکال‌زدایی که توسط --strip-debug حذف می‌شوند، تمام نمادهایی را که برای پردازش بازنشانی (relocation) مورد نیاز نیستند نیز حذف می‌کند.
هنگام حذف نمادها، نماد symbolname را حتی در صورتی که در حالت عادی باید حذف می‌شد، نگه می‌دارد. این گزینه می‌تواند بیش از یک بار مشخص شود.
برای فایل‌های ELF، سعی می‌کند (یا سعی نمی‌کند) با حذف یادداشت‌های تکراری، اندازهٔ هر بخش از نوع SHT_NOTE را کاهش دهد. حالت پیش‌فرض تلاش برای این کاهش است، مگر آنکه اطلاعات اشکال‌زدایی یا DWO در حال حذف شدن باشند.
نماد symbolname را از فایل مبدأ حذف می‌کند. این گزینه می‌تواند بیش از یک بار مشخص شود و ممکن است با سایر گزینه‌های strip به‌جز -K ترکیب شود.
به‌جای جایگزین کردن فایل موجود، خروجی پیراسته (strip شده) را در file قرار می‌دهد. هنگامی که از این آرگومان استفاده می‌شود، تنها یک آرگومان objfile می‌تواند مشخص شود.
تاریخ‌های دسترسی و تغییر فایل را حفظ می‌کند.
در حالت معین (deterministic) عمل می‌کند. هنگام کپی کردن اعضای آرشیو و نوشتن نمایهٔ آرشیو، از مقدار صفر برای UIDها، GIDها و برچسب‌های زمانی استفاده می‌کند و حالت‌های فایلی یکسانی را برای تمام فایل‌ها به کار می‌برد.

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

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

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

امکان استفاده از عبارات باقاعده را در 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 the executable as normal. Assuming that it is called>
"foo" باشد، سپس...
1.<Run "objcopy --only-keep-debug foo foo.dbg"; to>
جهت ساخت فایلی حاوی اطلاعات اشکال‌زدایی.
1.<Run "objcopy --strip-debug foo"; to create a>
جهت ساخت یک فایل اجرایی پیراسته.
1.<Run "objcopy --add-gnu-debuglink=foo.dbg foo">;
جهت افزودن پیوندی به اطلاعات اشکال‌زدایی درون فایل اجرایی پیراسته.

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

1.<Link the executable as normal.>
1.<Copy "foo" to "foo.full">
1.<Run "strip --strip-debug foo">;
1.<Run "objcopy --add-gnu-debuglink=foo.full foo">;

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

نکته---این سوییچ تنها برای استفاده روی فایل‌هایی در نظر گرفته شده است که به‌طور کامل پیوند خورده‌اند. استفاده از آن روی فایل‌های شیء (object files) که اطلاعات اشکال‌زدایی در آن‌ها ممکن است ناقص باشد، منطقی نیست. علاوه بر این، قابلیت gnu_debuglink در حال حاضر تنها از وجود یک نام فایل حاوی اطلاعات اشکال‌زدایی پشتیبانی می‌کند، نه چندین نام فایل بر پایهٔ یک نام برای هر فایل شیء. بارگذاری افزونه با نام name جهت افزودن پشتیبانی از انواع هدف بیشتر. این گزینه تنها در صورتی موجود است که زنجیره ابزار (toolchain) با فعال بودن پشتیبانی از افزونه ساخته شده باشد.

اگر --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.

Copyright (c) 1991-2025 Free Software Foundation, Inc.

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

2026-01-23 binutils-2.45.1