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)" ابزار 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 است.
تمام نمادها را حذف می‌کند.
تنها نمادهای اشکال‌زدایی را حذف می‌کند.
محتویات تمام بخش‌های 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 در ادامه غیرفعال کرد..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 پیراسته نمی‌شد خالی می‌کند و بخش‌های خطایابی (debugging sections) را دست‌نخورده باقی می‌گذارد. در فایل‌های ELF، این گزینه تمام بخش‌های یادداشت (note sections) را نیز در خروجی حفظ می‌کند.

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

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

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

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

۱.<فایل اجرایی را طبق روال معمول پیوند دهید.>
۱.<کپی کردن "foo" به "foo.full">
۱.<اجرای "strip --strip-debug foo">;
۱.<اجرای "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 از پلاگین پیونددهنده استفاده کند، باید آن را در دایرکتوری ${libdir}/bfd-plugins کپی کرد. برای کامپایل‌های مبتنی بر GCC، پلاگین پیونددهنده liblto_plugin.so.0.0.0 نام دارد. برای کامپایل‌های مبتنی بر Clang، نام آن LLVMgold.so است. پلاگین GCC همواره با نسخه‌های پیشین سازگار به عقب (backwards compatible) است، بنابراین تنها کپی کردن جدیدترین نسخه کافی خواهد بود.

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

گزینه‌ها در file با نویسهٔ فاصله (whitespace) از یکدیگر جدا می‌شوند. یک نویسهٔ فاصله می‌تواند با احاطه کردن کل گزینه درون گیومهٔ تکی یا جفت‌گیومه در یک گزینه گنجانده شود. هر نویسه‌ای (از جمله ممیز وارونه) را می‌توان با پیشوند قرار دادن یک ممیز وارونه به همراه نویسهٔ مورد نظر وارد کرد. خود file ممکن است شامل گزینه‌های @file دیگری باشد؛ هر کدام از این گزینه‌ها به‌صورت بازگشتی پردازش خواهند شد..SH "همچنین ببینید (SEE ALSO)" مدخل‌های Info برای binutils.

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

اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط GNU Free Documentation License، نسخه 1.3 یا هر نسخهٔ جدیدترِ منتشرشده توسط Free Software Foundation داده می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. نسخه‌ای از مجوز در بخشی با عنوان “GNU Free Documentation License” آورده شده است.

2026-01-23 binutils-2.45.1