| 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 <output_format> -B <architecture> \ --rename-section .data=.rodata,alloc,load,readonly,data,contents \ <input_binary_file> <output_object_file>
- --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” آورده شده است.
| 2026-01-23 | binutils-2.45.1 |