OBJCOPY(1) GNU Development Tools OBJCOPY(1) نام (NAME) objcopy - کپی و تبدیل فایل‌های شیء خلاصه دستور (SYNOPSIS) objcopy [-F bfdname|--target=bfdname] [-I bfdname|--input-target=bfdname] [-O bfdname|--output-target=bfdname] [-B bfdarch|--binary-architecture=bfdarch] [-S|--strip-all] [-g|--strip-debug] [--strip-unneeded] [-K symbolname|--keep-symbol=symbolname] [--keep-file-symbols] [--keep-section-symbols] [-N symbolname|--strip-symbol=symbolname] [--strip-unneeded-symbol=symbolname] [-G symbolname|--keep-global-symbol=symbolname] [--localize-hidden] [-L symbolname|--localize-symbol=symbolname] [--globalize-symbol=symbolname] [--globalize-symbols=filename] [-W symbolname|--weaken-symbol=symbolname] [-w|--wildcard] [-x|--discard-all] [-X|--discard-locals] [-b byte|--byte=byte] [-i [breadth]|--interleave[=breadth]] [--interleave-width=width] [-j sectionpattern|--only-section=sectionpattern] [-R sectionpattern|--remove-section=sectionpattern] [--keep-section=sectionpattern] [--remove-relocations=sectionpattern] [--strip-section-headers] [-p|--preserve-dates] [-D|--enable-deterministic-archives] [-U|--disable-deterministic-archives] [--debugging] [--gap-fill=val] [--pad-to=address] [--set-start=val] [--adjust-start=incr] [--change-addresses=incr] [--change-section-address sectionpattern{=,+,-}val] [--change-section-lma sectionpattern{=,+,-}val] [--change-section-vma sectionpattern{=,+,-}val] [--change-warnings] [--no-change-warnings] [--set-section-flags sectionpattern=flags] [--set-section-alignment sectionpattern=align] [--add-section sectionname=filename] [--dump-section sectionname=filename] [--update-section sectionname=filename] [--rename-section oldname=newname[,flags]] [--long-section-names {enable,disable,keep}] [--change-leading-char] [--remove-leading-char] [--reverse-bytes=num] [--srec-len=ival] [--srec-forceS3] [--redefine-sym old=new] [--redefine-syms=filename] [--weaken] [--keep-symbols=filename] [--strip-symbols=filename] [--strip-unneeded-symbols=filename] [--keep-global-symbols=filename] [--localize-symbols=filename] [--weaken-symbols=filename] [--add-symbol name=[section:]value[,flags]] [--alt-machine-code=index] [--prefix-symbols=string] [--prefix-sections=string] [--prefix-alloc-sections=string] [--add-gnu-debuglink=path-to-file] [--only-keep-debug] [--strip-dwo] [--extract-dwo] [--extract-symbol] [--writable-text] [--readonly-text] [--pure] [--impure] [--file-alignment=num] [--heap=reserve[,commit]] [--image-base=address] [--section-alignment=num] [--stack=reserve[,commit]] [--subsystem=which:major.minor] [--compress-debug-sections] [--decompress-debug-sections] [--elf-stt-common=val] [--merge-notes] [--no-merge-notes] [--verilog-data-width=val] [-v|--verbose] [-V|--version] [--help] [--info] infile [outfile].SH "توضیحات (DESCRIPTION)" ابزار objcopy از گنو، محتویات یک فایل شیء (object file) را در فایلی دیگر کپی می‌کند. objcopy برای خواندن و نوشتن فایل‌های شیء از کتابخانهٔ GNU BFD استفاده می‌کند. این ابزار می‌تواند فایل شیء مقصد را در قالبی متفاوت از فایل شیء مبدأ بنویسد. رفتار دقیق objcopy با گزینه‌های خط فرمان کنترل می‌شود. توجه داشته باشید که objcopy باید بتواند یک فایل کاملاً پیوندخورده (fully linked) را بین هر دو قالبی کپی کند؛ با این حال، کپی کردن یک فایل شیء بازمکان‌پذیر (relocatable) بین هر دو قالبی ممکن است مطابق انتظار کار نکند. objcopy برای انجام تبدیل‌های خود فایل‌های موقت می‌سازد و سپس آن‌ها را حذف می‌کند. objcopy برای تمام کارهای تبدیل خود از BFD استفاده می‌کند؛ این ابزار به تمام قالب‌های شرح‌داده‌شده در BFD دسترسی دارد و از این رو قادر است بیشتر قالب‌ها را بدون این که صریحاً مشخص شوند، تشخیص دهد. از objcopy می‌توان با تعیین هدف خروجیِ srec (مثلاً با استفاده از -O srec) برای تولید S-recordها استفاده کرد. از objcopy می‌توان با به‌کارگیری هدف خروجیِ binary (مثلاً با استفاده از -O binary) برای تولید یک فایل دودویی خام (raw binary) استفاده کرد. هنگامی که objcopy یک فایل دودویی خام تولید می‌کند، اساساً یک رونوشت حافظه (memory dump) از محتویات فایل شیء ورودی می‌سازد. تمامی نمادها و اطلاعات بازمکانی دور ریخته خواهند شد. رونوشت حافظه از آدرس بارگذاریِ پایین‌ترین بخش کپی‌شده در فایل خروجی آغاز خواهد شد. هنگام تولید یک S-record یا یک فایل دودویی خام، استفاده از گزینهٔ -S برای حذف بخش‌های حاوی اطلاعات اشکال‌زدایی می‌تواند مفید باشد. در برخی موارد -R برای حذف بخش‌هایی که حاوی اطلاعات غیرضروری برای فایل دودویی هستند سودمند خواهد بود. نکته---objcopy قادر به تغییر ترتیب بایت‌ها (endianness) در فایل‌های ورودی خود نیست. اگر قالب ورودی دارای ترتیب بایت باشد (برخی قالب‌ها فاقد آن هستند)، objcopy تنها می‌تواند ورودی‌ها را در قالب‌هایی کپی کند که ترتیب بایت یکسان دارند یا فاقد ترتیب بایت هستند (مانند srec). (با این حال، گزینهٔ --reverse-bytes را ببینید.) گزینه‌ها (OPTIONS) infile outfile به‌ترتیب، فایل‌های ورودی و خروجی. اگر outfile را مشخص نکنید، objcopy یک فایل موقت ایجاد کرده و با تغییر نام مخرب، نتیجه را جایگزین نام infile می‌کند. -I bfdname --input-target=bfdname قالب شیء فایل مبدأ را به‌جای تلاش برای استنتاج خودکار آن، bfdname در نظر می‌گیرد. -O bfdname --output-target=bfdname فایل خروجی را با استفاده از قالب شیء bfdname می‌نویسد. -F bfdname --target=bfdname استفاده از bfdname به‌عنوان قالب شیء هم برای فایل ورودی و هم فایل خروجی؛ یعنی انتقال سادهٔ داده‌ها از مبدأ به مقصد بدون هیچ‌گونه تبدیل. -B bfdarch --binary-architecture=bfdarch هنگام تبدیل یک فایل ورودیِ بدون معماری به یک فایل شیء سودمند است. در این حالت معماری خروجی می‌تواند روی bfdarch تنظیم شود. اگر فایل ورودی دارای یک bfdarch شناخته‌شده باشد، این گزینه نادیده گرفته می‌شود. شما می‌توانید با ارجاع به نمادهای ویژه‌ای که در فرایند تبدیل ایجاد می‌شوند، در داخل یک برنامه به این داده‌های دودویی دسترسی داشته باشید. این نمادها _binary_objfile_start، _binary_objfile_end و _binary_objfile_size نامیده می‌شوند. برای نمونه می‌توانید یک فایل تصویر را به یک فایل شیء تبدیل کرده و سپس با استفاده از این نمادها در کد خود به آن دسترسی پیدا کنید. -j sectionpattern --only-section=sectionpattern تنها بخش‌های مشخص‌شده را از فایل ورودی به فایل خروجی کپی می‌کند. این گزینه می‌تواند بیش از یک بار مشخص شود. توجه داشته باشید که استفادهٔ نادرست از این گزینه ممکن است فایل خروجی را غیرقابل استفاده کند. در sectionpattern نویسه‌های عامه‌نما (wildcard) پذیرفته می‌شوند. اگر نخستین نویسه از sectionpattern علامت تعجب (!) باشد، بخش‌های منطبق کپی نخواهند شد، حتی اگر استفادهٔ قبلی از --only-section در همان خط فرمان موجب کپی شدن آن می‌شد. برای نمونه: --only-section=.text.* --only-section=!.text.foo تمام بخش‌های منطبق بر '.text.*' را کپی می‌کند، اما بخش '.text.foo' را کپی نخواهد کرد. -R sectionpattern --remove-section=sectionpattern هر بخشی را که با sectionpattern منطبق باشد از فایل خروجی حذف می‌کند. این گزینه می‌تواند بیش از یک بار مشخص شود. توجه داشته باشید که استفادهٔ نادرست از این گزینه ممکن است فایل خروجی را غیرقابل استفاده کند. در sectionpattern نویسه‌های عامه‌نما پذیرفته می‌شوند. استفادهٔ هم‌زمان از هر دو گزینهٔ -j و -R منجر به رفتاری تعریف‌نشده خواهد شد. اگر نخستین نویسه از sectionpattern علامت تعجب (!) باشد، بخش‌های منطبق حذف نخواهند شد، حتی اگر استفادهٔ قبلی از --remove-section در همان خط فرمان موجب حذف آن می‌شد. برای نمونه: --remove-section=.text.* --remove-section=!.text.foo تمام بخش‌های منطبق با الگوی '.text.*' را حذف خواهد کرد، اما بخش '.text.foo' را حذف نمی‌کند. --keep-section=sectionpattern هنگام حذف بخش‌ها از فایل خروجی، بخش‌هایی را که با sectionpattern مطابقت دارند نگه می‌دارد. --remove-relocations=sectionpattern بازمکانی‌های غیرپویا (non-dynamic relocations) را از فایل خروجی برای هر بخشی که با sectionpattern مطابقت داشته باشد، حذف می‌کند. این گزینه می‌تواند بیش از یک بار مشخص شود. توجه داشته باشید که استفادهٔ نادرست از این گزینه ممکن است فایل خروجی را غیرقابل استفاده کند، و تلاش برای حذف یک بخش بازمکانی پویا مانند .rela.plt از یک فایل اجرایی یا کتابخانهٔ مشترک با استفاده از --remove-relocations=.plt کار نخواهد کرد. در 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 اطلاعات بازمکانی و نمادها را از فایل مبدأ کپی نمی‌کند. همچنین بخش‌های اشکال‌زدایی (debug) را حذف می‌کند. -g --strip-debug نمادها یا بخش‌های اشکال‌زدایی را از فایل مبدأ کپی نمی‌کند. --strip-unneeded علاوه بر نمادها و بخش‌های اشکال‌زدایی که توسط --strip-debug حذف می‌شوند، تمام نمادهایی را که برای پردازش بازمکانی مورد نیاز نیستند نیز حذف می‌کند. -K symbolname --keep-symbol=symbolname هنگام پاک‌سازی نمادها، نماد symbolname را حتی اگر در حالت عادی حذف می‌شد، نگه می‌دارد. این گزینه می‌تواند بیش از یک بار مشخص شود..IP "-N symbolname" 4 --strip-symbol=symbolname نماد symbolname از فایل مبدأ کپی نشود. این گزینه می‌تواند بیش از یک بار مشخص شود. --strip-unneeded-symbol=symbolname نماد symbolname از فایل مبدأ کپی نشود مگر آنکه برای یک بازآرایی (relocation) مورد نیاز باشد. این گزینه می‌تواند بیش از یک بار مشخص شود. -G symbolname --keep-global-symbol=symbolname تنها نماد symbolname سراسری نگه داشته شود. تمام نمادهای دیگر نسبت به فایل محلی شوند تا از بیرون قابل مشاهده نباشند. این گزینه می‌تواند بیش از یک بار مشخص شود. نکته: این گزینه نمی‌تواند در ترکیب با گزینه‌های --globalize-symbol یا --globalize-symbols استفاده شود. --localize-hidden در یک شیء ELF، تمام نمادهایی که پدیداری پنهان (hidden) یا درونی (internal) دارند به‌عنوان محلی علامت‌گذاری شوند. این گزینه علاوه بر گزینه‌های محلی‌سازی مختص هر نماد مانند -L اعمال می‌شود. -L symbolname --localize-symbol=symbolname تبدیل نماد سراسری یا ضعیف با نام symbolname به یک نماد محلی، به طوری که از بیرون قابل مشاهده نباشد. این گزینه می‌تواند بیش از یک بار مشخص شود. نکته - نمادهای یکتا (unique) تبدیل نمی‌شوند. -W symbolname --weaken-symbol=symbolname نماد symbolname به نماد ضعیف تبدیل شود. این گزینه می‌تواند بیش از یک بار مشخص شود. --globalize-symbol=symbolname دامنه نماد symbolname سراسری شود تا خارج از فایلی که در آن تعریف شده است قابل مشاهده باشد. این گزینه می‌تواند بیش از یک بار مشخص شود. نکته: این گزینه نمی‌تواند در ترکیب با گزینه‌های -G یا --keep-global-symbol استفاده شود. -w --wildcard اجازه استفاده از عبارت‌های باقاعده در symbolnameهای به‌کاررفته در سایر گزینه‌های خط فرمان داده شود. عملگرهای علامت سؤال (؟)، ستاره (*)، ممیز وارونه (\) و قلاب‌ها ([]) می‌توانند در هر کجای نام نماد استفاده شوند. اگر نخستین نویسه از نام نماد علامت تعجب (!) باشد، معنای گزینه برای آن نماد معکوس می‌شود. برای نمونه: -w -W !foo -W fo* باعث می‌شود objcopy تمام نمادهایی را که با “fo” آغاز می‌شوند به‌جز نماد “foo” تضعیف کند. -x --discard-all نمادهای غیرسراسری از فایل مبدأ کپی نشوند. -X --discard-locals نمادهای محلی تولیدشده توسط کامپایلر کپی نشوند. (این نمادها معمولاً با L یا . آغاز می‌شوند.) -b byte --byte=byte اگر درهم‌بافی (interleaving) از طریق گزینه --interleave فعال شده باشد، محدوده بایت‌های نگه‌داشتنی از بایت byteاُم آغاز شود. byte می‌تواند در بازه 0 تا breadth-1 باشد، که در آن breadth مقدار تعیین‌شده توسط گزینه --interleave است. -i [breadth] --interleave[=breadth] تنها یک محدوده از هر breadth بایت کپی شود. (داده‌های سرآیند تحت تأثیر قرار نمی‌گیرند). با گزینه --byte مشخص کنید که کپی با کدام بایت در محدوده آغاز شود. پهنای محدوده را با گزینه --interleave-width تعیین کنید. این گزینه برای ایجاد فایل‌ها به‌منظور برنامه‌ریزی ROM مفید است. معمولاً با یک هدف خروجی "srec" استفاده می‌شود. توجه داشته باشید که اگر گزینه --byte را نیز تعیین نکنید، objcopy خطا خواهد گرفت. عرض پیش‌فرض درهم‌بافی 4 است؛ بنابراین با تنظیم --byte روی 0، objcopy نخستین بایت از هر چهار بایت را از ورودی به خروجی کپی می‌کند. --interleave-width=width هنگام استفاده همراه با گزینه --interleave، در هر نوبت width بایت کپی شود. شروع محدوده بایت‌های کپی‌شونده با گزینه --byte و گستره محدوده با گزینه --interleave تعیین می‌شود. مقدار پیش‌فرض این گزینه 1 است. مجموع مقدار width و مقدار byte تعیین‌شده با گزینه --byte نباید از عرض درهم‌بافی تعیین‌شده با گزینه --interleave بیشتر باشد. از این گزینه می‌توان برای ایجاد ایمیج‌ها برای دو حافظه فلش 16 بیتیِ درهم‌بافته روی یک گذرگاه 32 بیتی با ارسال -b 0 -i 4 --interleave-width=2 و -b 2 -i 4 --interleave-width=2 به دو دستور objcopy استفاده کرد. اگر ورودی '12345678' باشد، خروجی‌ها به ترتیب '1256' و '3478' خواهند بود. -p --preserve-dates تاریخ‌های دسترسی و تغییر فایل خروجی، مشابه تاریخ‌های فایل ورودی تنظیم شوند. این گزینه همچنین تاریخ ذخیره‌شده در سرآیند فایل با قالب PE را کپی می‌کند، مگر آنکه متغیر محیطی SOURCE_DATE_EPOCH تعریف شده باشد. در صورت تعریف، این متغیر به‌عنوان تاریخ ذخیره‌شده در سرآیند استفاده می‌شود، که به‌صورت تعداد ثانیه‌ها از مبدأ زمان یونیکس (Unix epoch) تفسیر خواهد شد. -D --enable-deterministic-archives فعالیت در حالت معین (deterministic). هنگام کپی کردن اعضای آرشیو و نوشتن نمایه آرشیو، برای UIDها، GIDها و برچسب‌های زمانی از صفر استفاده شود و برای همه فایل‌ها حالت‌های فایل یکنواخت به کار رود. اگر binutils با --enable-deterministic-archives پیکربندی شده باشد، این حالت به‌طور پیش‌فرض فعال است. می‌توان آن را با گزینه -U در زیر غیرفعال کرد. -U --disable-deterministic-archives در حالت معین عمل نشود. این برعکس گزینه -D در بالا است: هنگام کپی کردن اعضای آرشیو و نوشتن نمایه آرشیو، از مقادیر واقعی UID، GID، برچسب زمانی و حالت فایل آن‌ها استفاده شود. این حالت پیش‌فرض است مگر آنکه binutils با --enable-deterministic-archives پیکربندی شده باشد. --debugging در صورت امکان، اطلاعات اشکال‌زدایی تبدیل شود. این رفتار پیش‌فرض نیست زیرا فقط قالب‌های اشکال‌زدایی خاصی پشتیبانی می‌شوند و فرایند تبدیل می‌تواند زمان‌بر باشد. --gap-fill val فاصله‌های میان بخش‌ها با val پر شوند. این عملیات روی نشانی بارگذاری (LMA) بخش‌ها اعمال می‌شود. این کار با افزایش اندازه بخشی که نشانی پایین‌تری دارد و پر کردن فضای اضافه ایجادشده با val صورت می‌پذیرد. --pad-to address فایل خروجی تا نشانی بارگذاری address بالشتک‌گذاری (pad) شود. این کار با افزایش اندازه آخرین بخش انجام می‌شود. فضای اضافی با مقدار مشخص‌شده توسط --gap-fill (پیش‌فرض صفر) پر می‌شود. --set-start val نشانی آغازین (که همچنین به عنوان نشانی ورود شناخته می‌شود) فایل جدید روی val تنظیم شود. همه قالب‌های فایل شیء از تنظیم نشانی آغازین پشتیبانی نمی‌کنند. --change-start incr --adjust-start incr تغییر نشانی آغازین (که همچنین به عنوان نشانی ورود شناخته می‌شود) با افزودن incr. همه قالب‌های فایل شیء از تنظیم نشانی آغازین پشتیبانی نمی‌کنند. --change-addresses incr نشانی‌های VMA و LMA تمام بخش‌ها، و همچنین نشانی آغازین را با افزودن incr تغییر می‌دهد. برخی از قالب‌های فایل شیء اجازه تغییر دلخواه نشانی‌های بخش را نمی‌دهند. توجه داشته باشید که این گزینه بخش‌ها را بازمکان‌یابی (relocate) نمی‌کند؛ اگر برنامه انتظار داشته باشد که بخش‌ها در نشانی خاصی بارگذاری شوند و از این گزینه برای تغییر بخش‌ها به گونه‌ای استفاده شود که در نشانی متفاوتی بارگذاری گردند، ممکن است برنامه با شکست مواجه شود. --change-section-address sectionpattern{=,+,-}val --adjust-section-vma sectionpattern{=,+,-}val هر دو نشانی VMA و LMA هر بخشی که با sectionpattern تطابق داشته باشد را تنظیم کرده یا تغییر می‌دهد. اگر از = استفاده شود، نشانی بخش بر روی val تنظیم می‌شود. در غیر این صورت، val به نشانی بخش اضافه یا از آن کم می‌شود. توضیحات ذکر شده ذیل --change-addresses در بالا را ببینید. اگر sectionpattern با هیچ بخشی در فایل ورودی مطابقت نداشته باشد، یک هشدار صادر خواهد شد، مگر اینکه از --no-change-warnings استفاده شود. --change-section-lma sectionpattern{=,+,-}val نشانی LMA هر بخشی که با sectionpattern مطابقت دارد را تنظیم کرده یا تغییر می‌دهد. نشانی LMA نشانی‌ای است که بخش در زمان بارگذاری برنامه در حافظه، در آن بارگذاری خواهد شد. معمولاً این نشانی همان نشانی VMA است (که نشانی بخش در زمان اجرای برنامه است)، اما در برخی سیستم‌ها، به‌ویژه سیستم‌هایی که برنامه در ROM نگهداری می‌شود، این دو می‌توانند متفاوت باشند. اگر از = استفاده شود، نشانی بخش بر روی val تنظیم می‌گردد. در غیر این صورت، val به نشانی بخش اضافه یا از آن کم می‌شود. توضیحات ذکر شده ذیل --change-addresses در بالا را ببینید. اگر sectionpattern با هیچ بخشی در فایل ورودی مطابقت نداشته باشد، یک هشدار صادر می‌شود، مگر اینکه از --no-change-warnings استفاده شده باشد. --change-section-vma sectionpattern{=,+,-}val نشانی VMA هر بخشی که با sectionpattern مطابقت دارد را تنظیم کرده یا تغییر می‌دهد. نشانی VMA نشانی‌ای است که بخش پس از شروع اجرای برنامه در آن قرار خواهد گرفت. معمولاً این نشانی همان نشانی LMA است (نشانی‌ای که بخش در زمان بارگذاری در حافظه قرار می‌گیرد)، اما در برخی سیستم‌ها، به‌ویژه آن‌هایی که برنامه در ROM نگهداری می‌شود، این دو می‌توانند با یکدیگر تفاوت داشته باشند. اگر از = استفاده شود، نشانی بخش روی val تنظیم می‌شود. در غیر این صورت، val به نشانی بخش اضافه یا از آن کم می‌شود. توضیحات ذکر شده ذیل --change-addresses در بالا را ببینید. اگر sectionpattern با هیچ بخشی در فایل ورودی مطابقت نداشته باشد، یک هشدار صادر خواهد شد، مگر اینکه از --no-change-warnings استفاده شود. نکته - تغییر دادن VMA بخش‌ها در یک فایل باینری کاملاً پیوندخورده می‌تواند خطرناک باشد، زیرا ممکن است کدهایی وجود داشته باشند که انتظار دارند بخش‌ها در نشانی قبلی‌شان قرار گرفته باشند. --change-warnings --adjust-warnings چنانچه از --change-section-address یا --change-section-lma یا --change-section-vma استفاده شود و الگوی بخش با هیچ بخشی تطابق نداشته باشد، یک هشدار صادر می‌کند. این حالت پیش‌فرض است. --no-change-warnings --no-adjust-warnings در صورت استفاده از --change-section-address یا --adjust-section-lma یا --adjust-section-vma، حتی اگر الگوی بخش با هیچ بخشی مطابقت نداشته باشد، هشداری صادر نمی‌کند. --set-section-flags sectionpattern=flags پرچم‌ها را برای هر بخشی که با sectionpattern مطابقت دارد تنظیم می‌کند. آرگومان flags رشته‌ای جداشده با ویرگول از نام‌های پرچم است. نام‌های قابل شناسایی عبارتند از: alloc، contents، load، noload، readonly، code، data، rom، exclude، share، debug و large. می‌توانید پرچم contents را برای بخشی که فاقد محتوا است تنظیم کنید، اما پاک کردن پرچم contents برای بخشی که محتوا دارد بی‌معنی است--به‌جای آن کافی است بخش را حذف کنید. همه پرچم‌ها برای تمام قالب‌های فایل شیء معنادار نیستند. به‌ویژه پرچم share تنها برای فایل‌های قالب COFF معنادار است و برای فایل‌های قالب ELF کاربردی ندارد. پرچم ویژه x86-64 در ELF یعنی large متناظر با SHF_X86_64_LARGE است. --set-section-alignment sectionpattern=align ترازسازی (alignment) را برای هر بخشی که با sectionpattern مطابقت دارد تنظیم می‌کند. align تراز را بر حسب بایت مشخص می‌کند و باید توانی از دو باشد، یعنی 1، 2، 4، 8.... نکته - تنظیم تراز یک بخش، به‌طور خودکار نشانی‌های LMA یا VMA آن را تراز نمی‌کند. اگر نیاز به تغییر آن‌ها نیز باشد، باید از گزینه‌های --change-section-lma و/یا --change-section-vma استفاده شود. همچنین توجه داشته باشید که تغییر VMAها می‌تواند در فایل‌های باینری کاملاً پیوندخورده که ممکن است کدی در آن‌ها انتظار داشته باشد محتویات بخش‌ها در نشانی قبلی‌شان قرار داشته باشند، مشکل ایجاد کند. --add-section sectionname=filename هنگام رونوشت فایل، یک بخش جدید به نام sectionname اضافه می‌کند. محتویات بخش جدید از فایل filename برداشته می‌شود. اندازه بخش برابر با اندازه فایل خواهد بود. این گزینه تنها روی قالب‌های فایلی کار می‌کند که می‌توانند از بخش‌هایی با نام‌های دلخواه پشتیبانی کنند. نکته - ممکن است لازم باشد برای تنظیم ویژگی‌های بخش تازه‌ساخته‌شده از گزینه --set-section-flags استفاده شود. --dump-section sectionname=filename محتویات بخش با نام sectionname را درون فایل filename قرار می‌دهد و محتویات پیشین احتمالی آن فایل را بازنویسی می‌کند. این گزینه معکوس --add-section است. این گزینه مشابه گزینه --only-section است، با این تفاوت که فایلی با قالب مشخص ایجاد نمی‌کند، بلکه تنها محتویات را به‌صورت داده باینری خام و بدون اعمال هیچ‌گونه بازمکان‌یابی تخلیه می‌کند. این گزینه را می‌توان بیش از یک بار مشخص کرد. --update-section sectionname=filename محتویات موجود بخشی به نام sectionname را با محتویات فایل filename جایگزین می‌کند. اندازه بخش متناسب با اندازه فایل تنظیم خواهد شد. پرچم‌های بخش برای sectionname بدون تغییر باقی می‌مانند. برای فایل‌های قالب ELF، نگاشت بخش به قطعه (section to segment mapping) نیز بدون تغییر باقی خواهد ماند؛ چیزی که با استفاده از --remove-section و سپس --add-section امکان‌پذیر نیست. این گزینه را می‌توان بیش از یک بار مشخص کرد. نکته - امکان استفاده از --rename-section و --update-section برای به‌روزرسانی و تغییر نام هم‌زمان یک بخش در یک خط فرمان واحد وجود دارد. در این حالت، نام اصلی بخش را به --update-section و نام‌های اصلی و جدید بخش را به --rename-section ارسال کنید. --add-symbol name=[section:]value[,flags] هنگام رونوشت فایل، یک نماد جدید به نام name اضافه می‌کند. این گزینه را می‌توان چندین بار مشخص کرد. اگر section داده شود، نماد با آن بخش مرتبط و نسبت به آن نسبی خواهد بود، در غیر این صورت یک نماد ABS خواهد بود. تعیین یک بخش تعریف‌نشده منجر به خطای مهلک خواهد شد. هیچ بررسی روی مقدار انجام نمی‌شود و همان‌طور که مشخص شده دریافت می‌گردد. پرچم‌های نماد را می‌توان مشخص کرد، اما تمام پرچم‌ها برای تمام قالب‌های فایل شیء معنادار نخواهند بود. به‌طور پیش‌فرض، نماد سراسری (global) خواهد بود. پرچم ویژه 'before=othersym' نماد جدید را پیش از othersym مشخص‌شده درج می‌کند، در غیر این صورت نماد(ها) به همان ترتیبی که ظاهر می‌شوند در انتهای جدول نمادها اضافه خواهند شد. --rename-section oldname=newname[,flags] نام یک بخش را از oldname به newname تغییر می‌دهد و در صورت تمایل، پرچم‌های بخش را نیز در طول فرایند به flags تغییر می‌دهد. این کار نسبت به استفاده از اسکریپت پیونددهنده برای تغییر نام این مزیت را دارد که خروجی همچنان به عنوان یک فایل شیء باقی می‌ماند و به یک فایل اجرایی پیوندخورده تبدیل نمی‌شود. این گزینه همان مجموعه پرچم‌های گزینه --set-section-flags را می‌پذیرد. این گزینه به‌ویژه زمانی مفید است که قالب ورودی باینری باشد، زیرا در این حالت همواره بخشی به نام .data ایجاد می‌شود. برای نمونه، اگر در عوض بخواهید بخشی به نام .rodata حاوی داده‌های باینری ایجاد کنید، می‌توانید از خط فرمان زیر برای انجام این کار استفاده کنید: objcopy -I binary -O -B \ --rename-section .data=.rodata,alloc,load,readonly,data,contents \ --long-section-names {enable,disable,keep} مدیریت نام‌های طولانی بخش را هنگام پردازش قالب‌های شیء "COFF" و "PE-COFF" کنترل می‌کند. رفتار پیش‌فرض، یعنی keep، حفظ نام‌های طولانی بخش در صورت وجود در فایل ورودی است. گزینه‌های enable و disable استفاده از نام‌های طولانی بخش را در شیء خروجی به صورت اجباری فعال یا غیرفعال می‌کنند؛ هنگامی که disable اعمال شود، هرگونه نام طولانی بخش در شیء ورودی کوتاه خواهد شد. گزینه enable تنها در صورتی نام‌های طولانی بخش را درج می‌کند که در ورودی‌ها وجود داشته باشند؛ این رفتار تا حد زیادی همانند keep است، اما اینکه آیا گزینه enable ممکن است ایجاد یک جدول رشته خالی را در فایل خروجی تحمیل کند یا خیر، تعریف‌نشده باقی مانده است. --change-leading-char برخی از قالب‌های فایل شیء از نویسه‌های ویژه‌ای در ابتدای نمادها استفاده می‌کنند. رایج‌ترین نویسه از این دست، خط زیر (underscore) است که کامپایلرها اغلب آن را پیش از هر نماد اضافه می‌کنند. این گزینه به objcopy می‌گوید هنگام تبدیل میان قالب‌های فایل شیء، نویسه آغازین هر نماد را تغییر دهد. اگر قالب‌های فایل شیء از نویسه آغازین یکسانی استفاده کنند، این گزینه هیچ تأثیری ندارد. در غیر این صورت، برحسب مورد نویسه‌ای را اضافه، حذف یا تغییر می‌دهد. --remove-leading-char اگر نخستین نویسه یک نماد سراسری، نویسه آغازین ویژه نماد باشد که توسط قالب فایل شیء استفاده می‌شود، آن نویسه را حذف می‌کند. متداول‌ترین نویسه آغازین نماد، خط زیر است. این گزینه خط زیر آغازین را از تمام نمادهای سراسری حذف خواهد کرد. این ویژگی زمانی مفید است که بخواهید فایل‌های شیء با قالب‌های فایلی مختلف و قراردادهای نام‌گذاری متفاوت برای نمادها را به یکدیگر پیوند دهید. این گزینه با --change-leading-char تفاوت دارد زیرا صرف‌نظر از قالب فایل شیءِ خروجی، در صورت لزوم همواره نام نماد را تغییر می‌دهد. --reverse-bytes=num بایت‌ها را در یک بخش حاوی محتوای خروجی معکوس می‌کند. طول بخش باید بر مقدار ارائه‌شده بخش‌پذیر باشد تا امکان انجام این جابه‌جایی وجود داشته باشد. معکوس‌سازی پیش از اجرای درهم‌بافی (interleaving) انجام می‌گیرد. این گزینه معمولاً در تولید ایمیج‌های ROM برای سیستم‌های مقصد مشکل‌دار استفاده می‌شود. برای نمونه، در برخی بردهای مقصد، کلمات ۳۲ بیتی واکشی‌شده از ROMهای ۸ بیتی، صرف‌نظر از ترتیب بایت پردازنده، با ترتیب بایت little-endian بازترکیب می‌شوند. بسته به مدل برنامه‌نویسی، ممکن است ترتیب بایت (endianness) حافظه ROM نیاز به تغییر داشته باشد. یک فایل ساده با بخشی حاوی هشت بایت زیر را در نظر بگیرید: 12345678. با استفاده از --reverse-bytes=2 برای مثال فوق، بایت‌ها در فایل خروجی به ترتیب 21436587 مرتب خواهند شد. با استفاده از --reverse-bytes=4 برای مثال فوق، بایت‌ها در فایل خروجی به ترتیب 43218765 مرتب خواهند شد. با استفاده از --reverse-bytes=2 برای مثال فوق و در پی آن اجرای --reverse-bytes=4 روی فایل خروجی، بایت‌ها در دومین فایل خروجی به ترتیب 34127856 مرتب خواهند شد..IP --srec-len=ival 4 تنها برای خروجی srec معنادار است. بیشینهٔ طول Srecordهای تولیدی را روی ival تنظیم می‌کند. این طول شامل فیلدهای آدرس، داده و crc می‌شود. --srec-forceS3 تنها برای خروجی srec معنادار است. از تولید رکوردهای S1/S2 جلوگیری کرده و قالبی صرفاً شامل رکوردهای S3 ایجاد می‌کند. --redefine-sym old=new نام نماد old را به new تغییر می‌دهد. این گزینه زمانی که سعی دارید دو مؤلفه را که کد منبعی از آن‌ها در دست ندارید به یکدیگر پیوند دهید و تداخل نام وجود دارد، می‌تواند مفید باشد. --redefine-syms=filename گزینهٔ --redefine-sym را برای هر جفت‌نماد «old new» فهرست‌شده در فایل filename اعمال می‌کند. فایل filename صرفاً یک فایل متنی ساده است که در هر خط آن یک جفت‌نماد قرار دارد. توضیحات خطی را می‌توان با نویسهٔ هش (#) درج کرد. این گزینه می‌تواند بیش از یک بار مشخص شود. --weaken تمام نمادهای سراسری (global) در فایل را به نمادهای ضعیف (weak) تبدیل می‌کند. این گزینه هنگام ساخت یک شیء (object) که قرار است با استفاده از گزینهٔ -R در پیونددهنده با سایر اشیاء پیوند داده شود، می‌تواند مفید باشد. این گزینه تنها زمانی مؤثر است که از قالب فایل شیئی استفاده شود که از نمادهای ضعیف پشتیبانی می‌کند. --keep-symbols=filename گزینهٔ --keep-symbol را برای هر نماد فهرست‌شده در فایل filename اعمال می‌کند. فایل filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. توضیحات خطی را می‌توان با نویسهٔ هش درج کرد. این گزینه می‌تواند بیش از یک بار مشخص شود. --strip-symbols=filename گزینهٔ --strip-symbol را برای هر نماد فهرست‌شده در فایل filename اعمال می‌کند. فایل filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. توضیحات خطی را می‌توان با نویسهٔ هش درج کرد. این گزینه می‌تواند بیش از یک بار مشخص شود. --strip-unneeded-symbols=filename گزینهٔ --strip-unneeded-symbol را برای هر نماد فهرست‌شده در فایل filename اعمال می‌کند. فایل filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. توضیحات خطی را می‌توان با نویسهٔ هش درج کرد. این گزینه می‌تواند بیش از یک بار مشخص شود. --keep-global-symbols=filename گزینهٔ --keep-global-symbol را برای هر نماد فهرست‌شده در فایل filename اعمال می‌کند. فایل filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. توضیحات خطی را می‌توان با نویسهٔ هش درج کرد. این گزینه می‌تواند بیش از یک بار مشخص شود. --localize-symbols=filename گزینهٔ --localize-symbol را برای هر نماد فهرست‌شده در فایل filename اعمال می‌کند. فایل filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. توضیحات خطی را می‌توان با نویسهٔ هش درج کرد. این گزینه می‌تواند بیش از یک بار مشخص شود. --globalize-symbols=filename گزینهٔ --globalize-symbol را برای هر نماد فهرست‌شده در فایل filename اعمال می‌کند. فایل filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. توضیحات خطی را می‌توان با نویسهٔ هش درج کرد. این گزینه می‌تواند بیش از یک بار مشخص شود. نکته: این گزینه نمی‌تواند همراه با گزینه‌های -G یا --keep-global-symbol استفاده شود. --weaken-symbols=filename گزینهٔ --weaken-symbol را برای هر نماد فهرست‌شده در فایل filename اعمال می‌کند. فایل filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. توضیحات خطی را می‌توان با نویسهٔ هش درج کرد. این گزینه می‌تواند بیش از یک بار مشخص شود. --alt-machine-code=index اگر معماری خروجی دارای کدهای ماشین جایگزین باشد، به‌جای کد پیش‌فرض از کد indexاُم استفاده می‌کند. این ویژگی در حالتی مفید است که یک کد رسمی به یک ماشین اختصاص داده شود و زنجیرهٔ ابزار کد جدید را به کار گیرد، اما سایر برنامه‌ها همچنان به استفاده از کد اصلی وابسته باشند. برای معماری‌های مبتنی بر ELF، اگر جایگزین index وجود نداشته باشد، این مقدار به‌صورت یک عدد مطلق در نظر گرفته می‌شود تا در فیلد e_machine از سرایند ELF ذخیره گردد. --writable-text بخش متن (text) خروجی را قابل‌نوشتن علامت‌گذاری می‌کند. این گزینه برای تمام قالب‌های فایل شیء معنادار نیست. --readonly-text بخش متن خروجی را در برابر نوشتن محافظت‌شده می‌کند. این گزینه برای تمام قالب‌های فایل شیء معنادار نیست. --pure فایل خروجی را به‌صورت demand paged علامت‌گذاری می‌کند. این گزینه برای تمام قالب‌های فایل شیء معنادار نیست. --impure فایل خروجی را به‌صورت impure (ناخالص) علامت‌گذاری می‌کند. این گزینه برای تمام قالب‌های فایل شیء معنادار نیست. --prefix-symbols=string رشتهٔ string را به‌عنوان پیشوند به تمام نمادهای موجود در فایل خروجی اضافه می‌کند. --prefix-sections=string رشتهٔ string را به‌عنوان پیشوند به نام تمام بخش‌های فایل خروجی اضافه می‌کند. --prefix-alloc-sections=string رشتهٔ string را به‌عنوان پیشوند به نام تمام بخش‌های تخصیص‌یافته در فایل خروجی اضافه می‌کند. --add-gnu-debuglink=path-to-file یک بخش .gnu_debuglink ایجاد می‌کند که حاوی ارجاعی به path-to-file است و آن را به فایل خروجی اضافه می‌کند. نکته: فایلی که در مسیر path-to-file قرار دارد باید وجود داشته باشد. بخشی از فرایند افزودن بخش .gnu_debuglink شامل قرار دادن یک چکسام از محتویات فایل اطلاعات اشکال‌زدایی در این بخش است. اگر فایل اطلاعات اشکال‌زدایی در یک مکان ساخته شده ولی قرار است بعداً در مکان دیگری نصب شود، از مسیر مکان نصب‌شده استفاده نکنید. گزینهٔ --add-gnu-debuglink با شکست مواجه خواهد شد زیرا فایل نصب‌شده هنوز وجود ندارد. در عوض، فایل اطلاعات اشکال‌زدایی را در دایرکتوری جاری قرار داده و از گزینهٔ --add-gnu-debuglink بدون مشخص کردن هیچ مسیر دایرکتوری استفاده کنید، به این صورت: objcopy --add-gnu-debuglink=foo.debug در زمان اشکال‌زدایی، اشکال‌زدا تلاش خواهد کرد تا فایل جداگانهٔ اطلاعات اشکال‌زدایی را در مجموعه‌ای از مکان‌های شناخته‌شده جستجو کند. مجموعهٔ دقیق این مکان‌ها بر اساس توزیع مورد استفاده متفاوت است، اما معمولاً شامل موارد زیر می‌شود: "* همان دایرکتوریِ فایل اجرایی." "* یک زیردایرکتوری از دایرکتوری حاوی فایل اجرایی" به‌نام .debug "* یک دایرکتوری سراسری اشکال‌زدایی مانند /usr/lib/debug." تا زمانی که فایل اطلاعات اشکال‌زدایی پیش از اجرای اشکال‌زدا در یکی از این مکان‌ها نصب شده باشد، همه‌چیز باید به‌درستی کار کند. --keep-section-symbols هنگام پیراستن یک فایل، مثلاً با --strip-debug یا --strip-unneeded، هر نمادی را که مشخص‌کنندهٔ نام بخش‌ها باشد و در غیر این صورت حذف می‌شد، حفظ می‌کند. --keep-file-symbols هنگام پیراستن یک فایل، مثلاً با --strip-debug یا --strip-unneeded، هر نمادی را که مشخص‌کنندهٔ نام فایل‌های منبع باشد و در غیر این صورت حذف می‌شد، حفظ می‌کند. --only-keep-debug یک فایل را می‌پیراید؛ به این صورت که محتویات هر بخشی را که توسط --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.<دستور "objcopy --strip-debug foo" را اجرا کنید> 1.<دستور "objcopy --add-gnu-debuglink=foo.full foo" را اجرا کنید> یعنی فایلی که --add-gnu-debuglink به آن اشاره می‌کند می‌تواند همان فایل اجرایی کامل باشد. نیازی نیست که حتماً فایلی باشد که توسط سوییچ --only-keep-debug ساخته شده است. نکته---این سوییچ صرفاً برای استفاده روی فایل‌های کاملاً پیوندخورده در نظر گرفته شده است. استفاده از آن روی فایل‌های شیء که در آن‌ها اطلاعات اشکال‌زدایی ممکن است ناقص باشد، منطقی نیست. علاوه بر این، ویژگی gnu_debuglink در حال حاضر تنها از وجود یک نام فایل حاوی اطلاعات اشکال‌زدایی پشتیبانی می‌کند، نه چندین نام فایل به‌ازای هر فایل شیء. محتوای تمام بخش‌های DWARF .dwo را حذف می‌کند و بخش‌های اشکال‌زدایی باقی‌مانده و تمام نمادها را دست‌نخورده باقی می‌گذارد. این گزینه برای استفاده توسط کامپایلر به عنوان بخشی از گزینهٔ -gsplit-dwarf در نظر گرفته شده است، که اطلاعات اشکال‌زدایی را بین فایل .o و یک فایل جداگانهٔ .dwo تقسیم می‌کند. کامپایلر تمام اطلاعات اشکال‌زدایی را در همان فایل تولید می‌کند، سپس از گزینهٔ --extract-dwo برای کپی کردن بخش‌های .dwo به فایل .dwo و سپس از گزینهٔ --strip-dwo برای حذف آن بخش‌ها از فایل اصلی .o استفاده می‌کند. --extract-dwo محتوای تمام بخش‌های DWARF .dwo را استخراج می‌کند. برای اطلاعات بیشتر گزینهٔ --strip-dwo را ببینید. --file-alignment num تراز فایل را مشخص می‌کند. بخش‌ها در فایل همیشه از آفست‌هایی در فایل شروع می‌شوند که مضربی از این عدد باشند. مقدار پیش‌فرض آن 512 است. [این گزینه مخصوص مقصدهای PE است.] --heap reserve --heap reserve,commit تعداد بایت‌های حافظه برای رزرو (و در صورت تمایل تثبیت یا commit) جهت استفاده به عنوان heap برای این برنامه را مشخص می‌کند. [این گزینه مخصوص مقصدهای PE است.] --image-base value از value به عنوان آدرس پایهٔ برنامه یا dll شما استفاده می‌کند. این پایین‌ترین مکان در حافظه است که هنگام بارگذاری برنامه یا dll شما استفاده خواهد شد. برای کاهش نیاز به بازنشانی (relocate) و بهبود کارایی dllهای شما، هر یک باید یک آدرس پایهٔ یکتا داشته باشند و با هیچ dll دیگری هم‌پوشانی نداشته باشند. مقدار پیش‌فرض برای فایل‌های اجرایی 0x400000 و برای dllها 0x10000000 است. [این گزینه مخصوص مقصدهای PE است.] --section-alignment num [این گزینه مخصوص مقصدهای PE است.] فیلد تراز بخش (section alignment) را در هدر PE تنظیم می‌کند - در صورتی که در فایل باینری موجود باشد. بخش‌ها در حافظه همیشه از آدرس‌هایی شروع می‌شوند که مضربی از این عدد باشند. مقدار پیش‌فرض 0x1000 است. توجه - اگر آدرس‌های LMA یا VMA یک بخش دیگر تراز نباشند، و آن آدرس‌ها از طریق گزینه‌های --set-section-lma یا --set-section-vma تنظیم نشده باشند، و فایل به طور کامل بازنشانی (relocated) شده باشد، یک پیام هشدار صادر خواهد شد. سپس تصمیم‌گیری در مورد اینکه آیا LMA و VMA نیاز به به‌روزرسانی دارند یا خیر بر عهدهٔ کاربر خواهد بود. --stack reserve --stack reserve,commit تعداد بایت‌های حافظه برای رزرو (و در صورت تمایل تثبیت یا commit) جهت استفاده به عنوان stack برای این برنامه را مشخص می‌کند. [این گزینه مخصوص مقصدهای PE است.] --subsystem which --subsystem which:major --subsystem which:major.minor زیرسیستمی را مشخص می‌کند که برنامهٔ شما تحت آن اجرا خواهد شد. مقادیر مجاز برای which عبارتند از "native"، "windows"، "console"، "posix"، "efi-app"، "efi-bsd"، "efi-rtd"، "sal-rtd" و "xbox". شما همچنین می‌توانید به صورت اختیاری نسخهٔ زیرسیستم را نیز تنظیم کنید. مقادیر عددی نیز برای which پذیرفته می‌شوند. [این گزینه مخصوص مقصدهای PE است.] --extract-symbol پرچم‌ها (flags) و نمادهای بخش‌های فایل را نگه می‌دارد اما تمام داده‌های بخش‌ها را حذف می‌کند. به‌طور مشخص، این گزینه: *<محتوای تمام بخش‌ها را حذف می‌کند؛> *<اندازهٔ هر بخش را روی صفر تنظیم می‌کند؛ و> *<آدرس آغازین فایل را روی صفر تنظیم می‌کند.> این گزینه برای ساخت یک فایل .sym برای یک هستهٔ VxWorks استفاده می‌شود. همچنین می‌تواند روش مفیدی برای کاهش اندازهٔ یک فایل ورودی پیونددهندهٔ --just-symbols باشد. --compress-debug-sections بخش‌های اشکال‌زدایی DWARF را با استفاده از zlib و با SHF_COMPRESSED از ELF ABI فشرده می‌کند. توجه - اگر فشرده‌سازی در واقع باعث بزرگ‌تر شدن یک بخش شود، آن بخش فشرده نمی‌شود. --compress-debug-sections=none --compress-debug-sections=zlib --compress-debug-sections=zlib-gnu --compress-debug-sections=zlib-gabi --compress-debug-sections=zstd برای فایل‌های ELF، این گزینه‌ها نحوهٔ فشرده‌سازی بخش‌های اشکال‌زدایی DWARF را کنترل می‌کنند. گزینهٔ --compress-debug-sections=none معادل --decompress-debug-sections است. گزینه‌های --compress-debug-sections=zlib و --compress-debug-sections=zlib-gabi معادل --compress-debug-sections هستند. گزینهٔ --compress-debug-sections=zlib-gnu بخش‌های اشکال‌زدایی DWARF را با استفاده از قالب منسوخ‌شدهٔ zlib-gnu فشرده می‌کند. بخش‌های اشکال‌زدایی تغییر نام می‌یابند تا با .zdebug آغاز شوند. گزینهٔ --compress-debug-sections=zstd بخش‌های اشکال‌زدایی DWARF را با استفاده از zstd فشرده می‌کند. توجه - اگر فشرده‌سازی در واقع باعث بزرگ‌تر شدن یک بخش شود، نه فشرده می‌شود و نه نام آن تغییر می‌کند. --decompress-debug-sections بخش‌های اشکال‌زدایی DWARF را از حالت فشرده خارج می‌کند. برای یک بخش .zdebug، نام اصلی بازیابی می‌شود. --elf-stt-common=yes --elf-stt-common=no برای فایل‌های ELF، این گزینه‌ها کنترل می‌کنند که آیا نمادهای عمومی (common symbols) باید به نوع "STT_COMMON" یا "STT_OBJECT" تبدیل شوند یا خیر. گزینهٔ --elf-stt-common=yes نوع نمادهای عمومی را به "STT_COMMON" تبدیل می‌کند. گزینهٔ --elf-stt-common=no نوع نمادهای عمومی را به "STT_OBJECT" تبدیل می‌کند. --merge-notes --no-merge-notes برای فایل‌های ELF، تلاش می‌کند (یا تلاش نمی‌کند) تا با حذف یادداشت‌های تکراری، اندازهٔ بخش‌های از نوع SHT_NOTE را کاهش دهد. -V --version شماره نسخهٔ objcopy را نمایش می‌دهد. --verilog-data-width=bytes برای خروجی Verilog، این گزینه تعداد بایت‌های تبدیل‌شده برای هر عنصر دادهٔ خروجی را کنترل می‌کند. هدف ورودی، ترتیب بایت‌ها (endianness) در تبدیل را کنترل می‌کند. -v --verbose خروجی با جزئیات: تمام فایل‌های شیء تغییریافته را فهرست می‌کند. در مورد آرشیوها، objcopy -V تمام اعضای آرشیو را فهرست می‌کند. --help خلاصه‌ای از گزینه‌های objcopy را نمایش می‌دهد. --info فهرستی شامل تمام معماری‌ها و قالب‌های شیء موجود را نمایش می‌دهد. @file گزینه‌های خط فرمان را از file می‌خواند. گزینه‌های خوانده‌شده در جای گزینهٔ اصلی @file درج می‌شوند. اگر file وجود نداشته باشد، یا نتوان آن را خواند، با این گزینه به صورت تحت‌اللفظی رفتار خواهد شد و حذف نمی‌شود. گزینه‌ها در file با نویسه‌های فاصله (whitespace) از یکدیگر جدا می‌شوند. یک نویسهٔ فاصله می‌تواند با محصور کردن کل گزینه در نقل‌قول تکی یا دوتایی، درون یک گزینه گنجانده شود. هر نویسه‌ای (از جمله بک‌اسلش) می‌تواند با قرار دادن یک بک‌اسلش در پیش از آن گنجانده شود. خود file ممکن است شامل گزینه‌های @file بیشتری باشد؛ چنین گزینه‌هایی به صورت بازگشتی پردازش خواهند شد..SH "همچنین ببینید (SEE ALSO)" ld(1)، objdump(1) و مدخل‌های Info برای binutils. کپی‌رایت و تکثیر (COPYRIGHT) Copyright (c) 1991-2025 Free Software Foundation, Inc. اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه متأخر دیگری که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. نسخه‌ای از این مجوز در بخشی با عنوان “GNU Free Documentation License” آورده شده است. binutils-2.45.1 2026-01-23 OBJCOPY(1)