STRIP(1) GNU Development Tools STRIP(1)

i686-w64-mingw32-strip - حذف نمادها و اطلاعات غیرضروری از فایل‌های باینری MinGW-w64

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

ابزار 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 را نگه می‌دارد.
تغییرمکان‌ها را برای هر بخش منطبق با 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 در زیر غیرفعال کرد.

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

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

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

باعث می‌شود strip فقط نمادهایی را که با حروف "fo" شروع می‌شوند نگه دارد، اما نماد "foo" را حذف کند.

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

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

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

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

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

1.
فایل اجرایی را طبق روال معمول پیوند دهید.
2.
فایل "foo" را به "foo.full" کپی کنید.
3.
دستور "strip --strip-debug foo"; را اجرا کنید.
4.
دستور "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 بیشتری باشد؛ هرگونه گزینه از این دست به صورت بازگشتی پردازش خواهد شد.

ورودی‌های Info برای binutils.

حق نشر (c) ۱۹۹۱-۲۰۲۶ بنیاد نرم‌افزارهای آزاد (Free Software Foundation, Inc.)

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

2026-08-03 binutils-2.47