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 را علاوه بر بخش‌هایی که در هر صورت حذف می‌شدند، از فایل خروجی حذف می‌کند. این گزینه ممکن است بیش از یک بار مشخص شود. توجه داشته باشید که استفادهٔ نادرست از این گزینه ممکن است فایل خروجی را غیرقابل استفاده کند. نویسهٔ عام * می‌تواند در انتهای 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ها و برچسب‌های زمانی استفاده می‌کند و حالت‌های دسترسی فایلیِ یکنواختی را برای تمام فایل‌ها به کار می‌برد.

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

نکته - سرآیندهای بخش (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 باشد.

نکته---این سوییچ تنها برای استفاده روی فایل‌های کاملاً پیوندخورده (fully linked) در نظر گرفته شده است. استفاده از آن روی فایل‌های شیء که ممکن است اطلاعات اشکال‌زدایی در آن‌ها ناقص باشد، منطقی نیست. علاوه بر این، قابلیت 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 با نویسه‌های فاصلهٔ خالی (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