STRIP(1) GNU Development Tools STRIP(1)
نام (NAME)
strip - حذف نمادها و سایر دادهها از فایلهای شیء
خلاصه دستور (SYNOPSIS)
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...
توضیحات (DESCRIPTION)
ابزار strip گنو تمامی نمادها را از فایلهای شیء objfile حذف میکند.
فهرست فایلهای شیء میتواند شامل بایگانیها (archives) نیز باشد. حداقل یک
فایل شیء باید مشخص شود.
دستور strip بهجای نوشتن رونوشتهای تغییریافته با نامهای دیگر، فایلهای
مشخصشده در آرگومانهایش را مستقیماً اصلاح میکند.
گزینهها (OPTIONS)
-F bfdname
--target=bfdname
با objfile اصلی بهصورت فایلی با قالب کد شیء bfdname رفتار کرده و آن
را با همان قالب بازنویسی میکند.
--help
خلاصهای از گزینههای strip را نمایش داده و خارج میشود.
--info
فهرستی شامل تمامی معماریها و قالبهای شیء موجود را نمایش میدهد.
-I bfdname
--input-target=bfdname
با objfile اصلی بهصورت فایلی با قالب کد شیء bfdname رفتار میکند.
-O bfdname
--output-target=bfdname
فایل objfile را با فایلی در قالب خروجی bfdname جایگزین میکند.
-R sectionname
--remove-section=sectionname
علاوه بر هر بخشی که در حالت عادی ممکن است حذف شود، هر بخشی با نام
sectionname را نیز از فایل خروجی حذف میکند. این گزینه میتواند بیش
از یک بار مشخص شود. توجه داشته باشید که استفاده نادرست از این
گزینه ممکن است فایل خروجی را غیرقابل استفاده کند. نویسه عاممنظوره
(wildcard) * میتواند در انتهای sectionname قرار گیرد؛ در این صورت،
هر بخشی که با sectionname شروع شود حذف خواهد شد.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بخشهای منطبق
حذف نخواهند شد، حتی اگر استفاده پیشین از --remove-section در همان
خط فرمان موجب حذف آنها میشد. برای مثال:
--remove-section=.text.* --remove-section=!.text.foo
تمامی بخشهای منطبق با الگوی '.text.*' را حذف خواهد کرد، اما بخش
'.text.foo' را حذف نمیکند.
--keep-section=sectionpattern
هنگام حذف بخشها از فایل خروجی، بخشهایی که با sectionpattern مطابقت
دارند را حفظ میکند.
--remove-relocations=sectionpattern
بازتخصیصها (relocations) را برای هر بخشی که با sectionpattern منطبق
باشد از فایل خروجی حذف میکند. این گزینه میتواند بیش از یک بار مشخص
شود. توجه داشته باشید که استفاده نادرست از این گزینه ممکن است فایل
خروجی را غیرقابل استفاده کند. نویسههای عاممنظوره در sectionpattern
پذیرفته میشوند. برای مثال:
--remove-relocations=.text.*
بازتخصیصها را برای تمامی بخشهای منطبق با الگوی '.text.*' حذف خواهد
کرد.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بازتخصیصهای
بخشهای منطبق حذف نخواهند شد، حتی اگر استفاده قبلی از
--remove-relocations در همان خط فرمان موجب حذف آنها میشد. برای
مثال:
--remove-relocations=.text.* --remove-relocations=!.text.foo
تمامی بازتخصیصهای بخشهای منطبق با الگوی '.text.*' را حذف میکند، اما
بازتخصیصهای بخش '.text.foo' را حذف نخواهد کرد.
--strip-section-headers
سرآیندهای بخشها (section headers) را حذف میکند. این گزینه مختص
فایلهای ELF است. بهطور خودکار مستلزم --strip-all و --merge-notes
است.
-s
--strip-all
تمامی نمادها را حذف میکند..IP -g 4
-S
-d
--strip-debug
تنها نمادهای اشکالزدایی را حذف میکند.
--strip-dwo
محتوای تمام بخشهای DWARF .dwo را حذف کرده و بخشهای اشکالزدایی
باقیمانده و تمام نمادها را دستنخورده باقی میگذارد. برای اطلاعات
بیشتر، به توضیحات این گزینه در بخش objcopy مراجعه کنید.
--strip-unneeded
علاوه بر نمادها و بخشهای اشکالزدایی که توسط --strip-debug حذف
میشوند، تمام نمادهایی را که برای پردازش بازنشانی (relocation) مورد
نیاز نیستند نیز حذف میکند.
-K symbolname
--keep-symbol=symbolname
هنگام حذف نمادها، نماد symbolname را حتی در صورتی که در حالت عادی
باید حذف میشد، نگه میدارد. این گزینه میتواند بیش از یک بار مشخص
شود.
-M
--merge-notes
--no-merge-notes
برای فایلهای ELF، سعی میکند (یا سعی نمیکند) با حذف یادداشتهای
تکراری، اندازهٔ هر بخش از نوع SHT_NOTE را کاهش دهد. حالت پیشفرض تلاش
برای این کاهش است، مگر آنکه اطلاعات اشکالزدایی یا DWO در حال حذف
شدن باشند.
-N symbolname
--strip-symbol=symbolname
نماد symbolname را از فایل مبدأ حذف میکند. این گزینه میتواند بیش از
یک بار مشخص شود و ممکن است با سایر گزینههای strip بهجز -K ترکیب
شود.
-o file
بهجای جایگزین کردن فایل موجود، خروجی پیراسته (strip شده) را در file
قرار میدهد. هنگامی که از این آرگومان استفاده میشود، تنها یک آرگومان
objfile میتواند مشخص شود.
-p
--preserve-dates
تاریخهای دسترسی و تغییر فایل را حفظ میکند.
-D
--enable-deterministic-archives
در حالت معین (deterministic) عمل میکند. هنگام کپی کردن اعضای آرشیو
و نوشتن نمایهٔ آرشیو، از مقدار صفر برای UIDها، GIDها و برچسبهای
زمانی استفاده میکند و حالتهای فایلی یکسانی را برای تمام فایلها به
کار میبرد.
اگر binutils با --enable-deterministic-archives پیکربندی شده باشد،
این حالت بهطور پیشفرض فعال است. میتوان آن را با گزینهٔ -U در زیر
غیرفعال کرد.
-U
--disable-deterministic-archives
در حالت معین عمل نمیکند. این برعکس گزینهٔ -D در بالا است: هنگام کپی
کردن اعضای آرشیو و نوشتن نمایهٔ آرشیو، از مقادیر واقعی UID، GID،
برچسب زمانی و حالتهای فایل آنها استفاده میکند.
این حالت پیشفرض است مگر آنکه binutils با
--enable-deterministic-archives پیکربندی شده باشد.
-w
--wildcard
امکان استفاده از عبارات باقاعده را در symbolnameهای بهکاررفته در
سایر گزینههای خط فرمان فراهم میکند. عملگرهای علامت سؤال (?)، ستاره
(*)، ممیز وارونه (\) و قلابها ([]) میتوانند در هر کجای نام نماد به
کار روند. اگر نخستین نویسهٔ نام نماد علامت تعجب (!) باشد، مفهوم
سوییچ برای آن نماد معکوس میشود. برای نمونه:
-w -K !foo -K fo*
باعث میشود که strip تنها نمادهایی را نگه دارد که با حروف "fo" آغاز
میشوند، اما نماد "foo" را کنار بگذارد.
-x
--discard-all
نمادهای غیرسراسری (non-global) را حذف میکند.
-X
--discard-locals
نمادهای محلی تولیدشده توسط کامپایلر را حذف میکند. (این نمادها
معمولاً با L یا . شروع میشوند.)
--keep-section-symbols
هنگام پیراستن یک فایل، شاید با --strip-debug یا --strip-unneeded،
هر نمادی را که مشخصکنندهٔ نام بخشها باشد و در غیر این صورت حذف میشد،
حفظ میکند.
--keep-file-symbols
هنگام پیراستن یک فایل، شاید با --strip-debug یا --strip-unneeded،
هر نمادی را که مشخصکنندهٔ نام فایلهای مبدأ باشد و در غیر این صورت
حذف میشد، حفظ میکند.
--only-keep-debug
یک فایل را میپیراید، محتوای هر بخشی را که توسط --strip-debug حذف
نمیشد خالی میکند و بخشهای اشکالزدایی را دستنخورده باقی میگذارد. در
فایلهای ELF، این کار تمام بخشهای یادداشت (note sections) را نیز در
خروجی حفظ میکند.
نکته - سرآیندهای بخشهای پیراستهشده، شامل اندازههای آنها، حفظ میشوند
اما محتویات بخشها دور ریخته میشود. سرآیندهای بخشها به این منظور حفظ
میشوند تا سایر ابزارها بتوانند فایل debuginfo را با فایل اجرایی
واقعی تطبیق دهند، حتی اگر آن فایل اجرایی به فضای نشانی متفاوتی
بازنشانی شده باشد.
هدف این است که این گزینه در کنار --add-gnu-debuglink برای ایجاد یک
فایل اجرایی دوقسمتی استفاده شود: یکی باینری پیراسته که فضای کمتری
در RAM و در توزیع اشغال میکند، و دیگری یک فایل اطلاعات اشکالزدایی
که تنها در صورت نیاز به قابلیتهای اشکالزدایی لازم است. روش پیشنهادی
برای ایجاد این فایلها به شرح زیر است:
1.
"foo" باشد، سپس...
1.
جهت ساخت فایلی حاوی اطلاعات اشکالزدایی.
1.
جهت ساخت یک فایل اجرایی پیراسته.
1.
جهت افزودن پیوندی به اطلاعات اشکالزدایی درون فایل اجرایی
پیراسته.
نکته---انتخاب ".dbg" بهعنوان پسوند فایل اطلاعات اشکالزدایی اختیاری
است. همچنین مرحلهٔ "--only-keep-debug" اختیاری است. میتوانید در عوض
این کار را انجام دهید:
1.
1.
1.
1.
یعنی فایلی که توسط --add-gnu-debuglink به آن اشاره میشود میتواند
فایل اجرایی کامل باشد و نیازی نیست فایلی باشد که توسط سوییچ
--only-keep-debug ایجاد شده است.
نکته---این سوییچ تنها برای استفاده روی فایلهایی در نظر گرفته شده
است که بهطور کامل پیوند خوردهاند. استفاده از آن روی فایلهای شیء
(object files) که اطلاعات اشکالزدایی در آنها ممکن است ناقص باشد،
منطقی نیست. علاوه بر این، قابلیت gnu_debuglink در حال حاضر تنها از
وجود یک نام فایل حاوی اطلاعات اشکالزدایی پشتیبانی میکند، نه چندین
نام فایل بر پایهٔ یک نام برای هر فایل شیء. بارگذاری افزونه با نام
name جهت افزودن پشتیبانی از انواع هدف بیشتر. این گزینه تنها در
صورتی موجود است که زنجیره ابزار (toolchain) با فعال بودن پشتیبانی
از افزونه ساخته شده باشد.
اگر --plugin مشخص نشود، اما پشتیبانی از افزونه فعال باشد، strip
فایلهای درون ${libdir}/bfd-plugins را به ترتیب الفبایی بررسی کرده و
اولین افزونهای که شیء مورد نظر را پشتیبانی کند به کار میگیرد.
لطفاً توجه داشته باشید که این پوشه جستجوی افزونه، همان پوشهای نیست
که توسط گزینه -plugin در ld استفاده میشود. به منظور استفاده strip
از افزونه پیونددهنده، باید آن را در پوشه ${libdir}/bfd-plugins کپی
کرد. برای کامپایلهای مبتنی بر GCC، نام افزونه پیونددهنده
liblto_plugin.so.0.0.0 است. برای کامپایلهای مبتنی بر Clang، نام آن
LLVMgold.so میباشد. افزونه GCC همیشه با نسخههای پیشین سازگار به عقب
است، بنابراین کپی کردن جدیدترین نسخه آن کفایت میکند.
-V
--version
نمایش شماره نسخه strip.
-v
--verbose
خروجی با جزئیات: فهرست کردن تمام فایلهای شیء اصلاحشده. در مورد
بایگانیها، strip -v تمام اعضای بایگانی را فهرست میکند.
@file
خواندن گزینههای خط فرمان از file. گزینههای خواندهشده به جای
گزینه اصلی @file قرار میگیرند. اگر file وجود نداشته باشد، یا
خوانده نشود، با گزینه بهصورت تحتاللفظی رفتار شده و حذف نمیشود.
گزینهها در file با نویسههای فاصله (whitespace) از یکدیگر جدا
میشوند. یک نویسه فاصله میتواند با قرار دادن کل گزینه در علامت
نقلقول تکی یا دوتایی گنجانده شود. هر نویسهای (از جمله بکاسلش)
میتواند با پیشوند کردن یک بکاسلش قبل از آن نویسه درج گردد. خود
file ممکن است شامل گزینههای @file دیگری باشد؛ هر یک از این
گزینهها بهصورت بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
مدخلهای Info برای binutils.
کپیرایت و تکثیر (COPYRIGHT)
Copyright (c) 1991-2025 Free Software Foundation, Inc.
اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو
(GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه بعدی منتشرشده
توسط بنیاد نرمافزارهای آزاد (Free Software Foundation) اعطا میشود؛ بدون
بخشهای تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. یک نسخه از
این مجوز در بخشی با عنوان «GNU Free Documentation License» گنجانده شده
است.
binutils-2.45.1 2026-01-23 STRIP(1)