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

سرایندهای بخش (section headers) را حذف می‌کند. این گزینه مختص پرونده‌های ELF است و مستلزم --strip-all و --merge-notes می‌باشد.
تمام نمادها را حذف می‌کند.
تنها نمادهای اشکال‌زدایی (debugging) را حذف می‌کند.
محتوای تمام بخش‌های .dwo مربوط به DWARF را حذف کرده و سایر بخش‌های اشکال‌زدایی و تمام نمادها را دست‌نخورده باقی می‌گذارد. برای اطلاعات بیشتر، توضیحات این گزینه را در بخش 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، هر نمادی را که مشخص‌کنندهٔ نام بخش‌ها باشد نگه می‌دارد، نمادهایی که در غیر این صورت حذف می‌شدند.
هنگام پیراستن یک فایل، مثلاً با --strip-debug یا --strip-unneeded، هر نمادی را که مشخص‌کنندهٔ نام فایل‌های منبع باشد نگه می‌دارد، نمادهایی که در غیر این صورت حذف می‌شدند.
پیراستن یک فایل، خالی کردن محتویات هر بخشی که توسط --strip-debug حذف نمی‌شد و دست‌نخورده باقی گذاشتن بخش‌های اشکال‌زدایی (debugging). در فایل‌های 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 ساخته شده است.

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

افزونه‌ای به نام name را برای افزودن پشتیبانی از انواع هدف‌های (target types) بیشتر بارگذاری می‌کند. این گزینه تنها در صورتی در دسترس است که زنجیره ابزار (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)، نسخهٔ ۱.۳ یا هر نسخهٔ بعدی منتشرشده توسط بنیاد نرم‌افزارهای آزاد (Free Software Foundation) اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. نسخه‌ای از این مجوز در بخشی با عنوان “GNU Free Documentation License” گنجانده شده است.

2026-01-23 binutils-2.45.1