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

ابزار GNU 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' را حذف نخواهد کرد.

سرایندهای بخش را حذف می‌کند. این گزینه مختص به فایل‌های ELF است و مستلزم --strip-all و --merge-notes می‌باشد.
تمام نمادها را حذف می‌کند..IP -g 4
تنها نمادهای اشکال‌زدایی را حذف می‌کند.
محتوای تمامی بخش‌های DWARF .dwo را حذف کرده، و سایر بخش‌های اشکال‌زدایی و تمامی نمادها را دست‌نخورده باقی می‌گذارد. برای اطلاعات بیشتر، توضیحات مربوط به این گزینه را در بخش objcopy ببینید.
علاوه بر نمادها و بخش‌های اشکال‌زدایی که توسط --strip-debug حذف می‌شوند، تمام نمادهایی را که برای پردازش بازتخصیص (relocation) لازم نیستند نیز حذف می‌کند.
هنگام حذف نمادها، نماد 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) را نیز در خروجی حفظ می‌کند.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2026-01-23 binutils-2.45.1