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' را حذف نمی‌کند.

سرایندهای بخش (section headers) را حذف می‌کند. این گزینه ویژهٔ فایل‌های ELF است. گزینه‌های --strip-all و --merge-notes را نیز در بر دارد.
تمام نمادها را حذف می‌کند.
فقط نمادهای اشکال‌زدایی (debugging symbols) را حذف می‌کند.
محتویات تمام بخش‌های 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

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

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

اجازه دادن به استفاده از عبارت‌های باقاعده در symbolnameها در سایر گزینه‌های خط فرمان. عملگرهای علامت سؤال (?)، ستاره (*)، ممیز وارونه (\) و قلاب‌ها ([]) می‌توانند در هر کجای نام نماد به کار روند. اگر نخستین نویسهٔ نام نماد علامت تعجب (!) باشد، مفهوم کلید برای آن نماد معکوس می‌شود. برای نمونه:
-w -K !foo -K fo*

باعث می‌شود strip تنها نمادهایی را که با حروف «fo» آغاز می‌شوند نگه دارد، اما نماد «foo» را دور بیندازد.

حذف نمادهای غیرسراسری (non-global).
حذف نمادهای محلی تولیدشده توسط کامپایلر. (این نمادها معمولاً با L یا . آغاز می‌شوند.)
هنگام پیراستن یک فایل، شاید با --strip-debug یا --strip-unneeded، تمام نمادهایی که مشخص‌کنندهٔ نام بخش‌ها (sections) هستند را نگه می‌دارد، که در غیر این صورت پیراسته می‌شدند.
هنگام پیراستن یک فایل، شاید با --strip-debug یا --strip-unneeded، تمام نمادهایی که مشخص‌کنندهٔ نام فایل‌های مبدأ هستند را نگه می‌دارد، که در غیر این صورت پیراسته می‌شدند.
پیراستن فایل، با خالی کردن محتویات هر بخشی که توسط --strip-debug پیراسته نمی‌شود و دست‌نخورده باقی گذاشتن بخش‌های اشکال‌زدایی. در فایل‌های ELF، این گزینه تمام بخش‌های note را نیز در خروجی حفظ می‌کند.

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

هدف این است که این گزینه به همراه --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 ایجاد شده است.

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

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

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

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