| ARM-NONE-EABI-OBJCOPY(1) | GNU Development Tools | ARM-NONE-EABI-OBJCOPY(1) |
نام (NAME)
arm-none-eabi-objcopy - کپی و تبدیل فایلهای شیء باینری برای معماری ARM
خلاصه دستور (SYNOPSIS)
arm-none-eabi-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]
[--binary-symbol-prefixstring]
[--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]
توضیحات (DESCRIPTION)
ابزار arm-none-eabi-objcopy در گنو، محتویات یک فایل شیء (Object File) را درون فایلی دیگر کپی میکند. arm-none-eabi-objcopy برای خواندن و نوشتن فایلهای شیء از کتابخانه BFD گنو (GNU BFD Library) بهره میبرد و میتواند فایل شیء مقصد را در قالبی متفاوت از فایل شیء مبدأ بنویسد. رفتار دقیق arm-none-eabi-objcopy توسط گزینههای خط فرمان کنترل میشود. توجه داشته باشید که arm-none-eabi-objcopy باید بتواند فایلی را که پیوند کامل خورده است (Fully Linked) بین هر دو قالب دلخواه کپی کند؛ با این حال، کپی کردن یک فایل شیء قابلبازنشانی (Relocatable) میان دو قالب گوناگون ممکن است آنطور که انتظار میرود عمل نکند.
دستور arm-none-eabi-objcopy برای انجام تبدیلات خود فایلهای موقتی میسازد و پس از پایان کار آنها را حذف میکند. arm-none-eabi-objcopy تمام کارهای تبدیل خود را با کتابخانه BFD انجام میدهد؛ بنابراین به کلیه قالبهای تعریفشده در BFD دسترسی دارد و میتواند بیشتر قالبها را بدون نیاز به معرفی صریح و خودکار شناسایی کند.
میتوان از arm-none-eabi-objcopy برای تولید رکوردهای اس (S-records) استفاده کرد؛ برای این کار کافی است هدف خروجی روی srec تنظیم شود (مانند -O srec).
از arm-none-eabi-objcopy میتوان برای ایجاد یک فایل باینری خام با تعیین هدف خروجی روی binary استفاده کرد (مانند -O binary). هنگامی که arm-none-eabi-objcopy یک فایل باینری خام تولید میکند، در عمل یک رونوشت حافظه (Memory Dump) از محتویات فایل شیء ورودی به دست میدهد. در این حالت کلیه نمادها و اطلاعات بازنشانی دور ریخته میشوند و تخلیه حافظه از آدرس بارگذاری پایینترین بخشی که در فایل خروجی کپی میشود آغاز خواهد شد.
هنگام تولید رکورد اس یا فایل باینری خام، استفاده از گزینه -S برای حذف بخشهای حاوی اطلاعات اشکالزدایی سودمند خواهد بود. در برخی موارد نیز گزینه -R برای حذف بخشهایی که اطلاعات آنها در فایل باینری مورد نیاز نیست مفید واقع میشود.
نکته: arm-none-eabi-objcopy قادر به تغییر ترتیب بایتها (Endianness) در فایلهای ورودی نیست. اگر قالب ورودی دارای ترتیب بایت باشد (برخی قالبها فاقد آن هستند)، arm-none-eabi-objcopy تنها میتواند ورودیها را در قالبهایی کپی کند که همان ترتیب بایت را دارند یا اساساً فاقد ترتیب بایت هستند (مانند srec). (البته به گزینه --reverse-bytes مراجعه کنید).
گزینهها (OPTIONS)
- infile
- outfile
- بهترتیب فایلهای ورودی و خروجی. اگر outfile را مشخص نکنید، arm-none-eabi-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 تنظیم میشود. اگر فایل ورودی خود معماری شناختهشدهای داشته باشد، این گزینه نادیده گرفته خواهد شد. درون یک برنامه میتوان با ارجاع به نمادهای ویژهای که در این فرآیند تبدیل ساخته میشوند، به این دادههای باینری دسترسی پیدا کرد. این نمادها به نامهای _binary_objfile_start، _binary_objfile_end و _binary_objfile_size نامگذاری میشوند. برای نمونه، میتوانید یک فایل تصویر را به یک فایل شیء تبدیل کرده و سپس با این نمادها در کدهای خود به آن دسترسی داشته باشید.
- -j sectionpattern
- --only-section=sectionpattern
- تنها
بخشهای
مشخصشده
را از فایل
ورودی به
فایل خروجی
کپی میکند.
این گزینه
میتواند
بیش از یک
بار به کار
رود. توجه
داشته
باشید که
استفاده
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند.
نویسههای
عامهنما
(Wildcard) در sectionpattern
مجاز هستند.
اگر نخستین نویسه 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
- اطلاعات بازنشانی و نمادها را از فایل مبدأ کپی نمیکند. همچنین بخشهای اشکالزدایی را نیز حذف مینماید.
- -g
- --strip-debug
- نمادها و بخشهای اشکالزدایی را از فایل مبدأ کپی نمیکند.
- --strip-unneeded
- علاوه بر نمادها و بخشهای اشکالزدایی که با --strip-debug حذف میشوند، کلیه نمادهایی را که برای پردازش بازنشانیها ضروری نیستند نیز حذف میکند.
- -K symbolname
- --keep-symbol=symbolname
- هنگام پاکسازی نمادها، نماد symbolname را حتی اگر در حالت عادی مشمول حذف باشد حفظ میکند. این گزینه میتواند بیش از یک بار به کار رود.
- -N symbolname
- --strip-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند. این گزینه میتواند بیش از یک بار وارد شود.
- --strip-unneeded-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند، مگر آنکه در یک بازنشانی به آن نیاز باشد. این گزینه میتواند بیش از یک بار استفاده شود.
- -G symbolname
- --keep-global-symbol=symbolname
- تنها نماد symbolname را سراسری (Global) نگه میدارد و کلیه نمادهای دیگر را برای فایل محلی (Local) میکند تا از بیرون قابل مشاهده نباشند. این گزینه میتواند بیش از یک بار به کار رود. نکته: این گزینه را نمیتوان همزمان با گزینههای --globalize-symbol یا --globalize-symbols استفاده کرد.
- --localize-hidden
- در شیء ELF، تمام نمادهایی را که سطح دید پنهان (Hidden) یا داخلی (Internal) دارند بهعنوان محلی علامتگذاری میکند. این گزینه مکمل گزینههای محلیسازی نمادهای خاص مانند -L است.
- -L symbolname
- --localize-symbol=symbolname
- یک نماد سراسری یا ضعیف با نام symbolname را به یک نماد محلی تبدیل میکند تا از بیرون فایل قابل مشاهده نباشد. این گزینه میتواند بیش از یک بار به کار رود. نکته: نمادهای یکتا (Unique symbols) تبدیل نمیشوند.
- -W symbolname
- --weaken-symbol=symbolname
- نماد symbolname را ضعیف (Weak) میکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --binary-symbol-prefix=string
- هنگام
استفاده
همراه با
--input-target=binary،
مقدار string را
بهعنوان
نام پایه
نمادهای
ایجادشده
برای فایل
ورودی
تعیین
میکند. این
نمادها
عبارتاند
از:
<string>_start <string>_end <string>_size
بهطور پیشفرض، گرداننده ورودی باینری نام پیشوند نماد را از ترکیب پیشوند _binary و نگارش تغییریافته نام فایل ورودی به دست میآورد. این گزینه امکان مشخص کردن صریح آن را فراهم میکند.
- --globalize-symbol=symbolname
- حوزه دید نماد symbolname را سراسری میکند تا در خارج از فایلی که در آن تعریف شده است نیز قابل مشاهده باشد. این گزینه میتواند بیش از یک بار به کار رود. نکته: این گزینه را نمیتوان همزمان با گزینههای -G یا --keep-global-symbol به کار برد.
- -w
- --wildcard
- استفاده از
عبارات
باقاعده (Regular
Expressions) را در
symbolnameهای به
کار رفته در
سایر
گزینههای
خط فرمان
مجاز
میشمارد.
عملگرهای
علامت سؤال
(؟)، ستاره (*)،
ممیز
وارونه (\) و
قلابها ([])
در هر کجای
نام نماد
قابل
استفاده
هستند. اگر
نخستین
نویسه در
نام نماد
علامت تعجب
(!) باشد،
منطق سوییچ
برای آن
نماد معکوس
میشود.
برای نمونه:
-w -W !foo -W fo*
باعث میشود arm-none-eabi-objcopy تمام نمادهایی را که با "fo" شروع میشوند، به جز نماد "foo"، ضعیف (Weaken) کند.
- -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 را مشخص نکنید، arm-none-eabi-objcopy خطا صادر خواهد کرد.
عرض پیشفرض درهمتنی 4 است؛ بنابراین اگر --byte روی 0 تنظیم شود، arm-none-eabi-objcopy از هر چهار بایت ورودی، اولین بایت را در خروجی کپی میکند.
- --interleave-width=width
- هنگام
استفاده با
گزینه --interleave،
در هر گام width
بایت را کپی
میکند.
نقطه شروع
بازه
بایتهای
مورد نظر با
گزینه --byte و
اندازه کل
گام با
گزینه --interleave
مشخص
میشود.
مقدار پیشفرض این گزینه 1 است. حاصلجمع width و مقدار byte تعیینشده در گزینه --byte نباید از عرض درهمتنی مشخصشده در گزینه --interleave فراتر رود.
از این گزینه میتوان برای ایجاد ایمیج جهت دو فلش ۱۶ بیتی که در یک باس ۳۲ بیتی بهصورت درهمتنیده قرار دارند استفاده کرد؛ این کار با ارسال -b 0 -i 4 --interleave-width=2 و -b 2 -i 4 --interleave-width=2 به دو دستور arm-none-eabi-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
- آدرس شروع (یا همان آدرس نقطه ورود / Entry Address) فایل جدید را روی val تنظیم میکند. همه قالبهای فایل شیء از تنظیم آدرس شروع پشتیبانی نمیکنند.
- --change-start incr
- --adjust-start incr
- آدرس شروع (نقطه ورود) را با افزودن مقدار incr تغییر میدهد. همه قالبهای فایل شیء از تغییر آدرس شروع پشتیبانی نمیکنند.
- --change-addresses incr
- --adjust-vma 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 کاربردی ندارد. فلگ اختصاصی large در ELF x86-64 نیز متناظر با SHF_X86_64_LARGE است.
- --set-section-alignment sectionpattern=align
- تراز (Alignment) را
برای
بخشهای
منطبق با
sectionpattern تنظیم
میکند.
آرگومان align
همترازی
را بر حسب
بایت مشخص
میکند و
باید توانی
از دو باشد
(مانند ۱،
۲، ۴، ۸ و...).
نکته: تنظیم تراز بخش بهطور خودکار آدرسهای 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 است، با این تفاوت که فایل فرمتبندیشده نمیسازد، بلکه دادهها را بهصورت باینری خام و بدون اعمال هیچگونه بازنشانی تخلیه (Dump) میکند. این گزینه میتواند چندین بار مشخص شود.
- --update-section sectionname=filename
- محتویات
موجود در
بخش sectionname را
با محتویات
فایل filename
جایگزین
میکند.
اندازه بخش
متناسب با
اندازه
فایل تنظیم
خواهد شد،
اما
فلگهای
بخش sectionname
بدون تغییر
باقی
میمانند.
در
فایلهای
فرمت ELF،
نگاشت بخش
به سگمنت (Segment)
نیز
دستنخورده
باقی
میماند؛
امری که با
استفاده از
--remove-section و به
دنبال آن
--add-section
امکانپذیر
نیست. این
گزینه
میتواند
بیش از یک
بار درج
شود.
نکته: میتوان همزمان از --rename-section و --update-section در یک خط فرمان برای بهروزرسانی محتوا و تغییر نام بخش بهره گرفت. در این شرایط، نام اصلی بخش را به --update-section و نامهای اصلی و جدید را به --rename-section بسپارید.
- --add-symbol name=[section:]value[,flags]
- هنگام کپی فایل، نماد جدیدی با نام name اضافه میکند. این گزینه میتواند چندین بار به کار رود. اگر section مشخص شود، نماد به آن بخش منتسب و نسبت به آن سنجیده میشود؛ در غیر این صورت یک نماد مطلق (ABS) خواهد بود. مشخص کردن یک بخش تعریفنشده منجر به خطای مهلک میشود. هیچ بررسی خاصی روی مقدار صورت نمیگیرد و مقدار دقیقاً همانطور که وارد شده پذیرفته خواهد شد. فلگهای نماد قابل تعیین هستند، اگرچه همه فلگها برای کلیه قالبهای فایل شیء معنادار نیستند. نماد بهطور پیشفرض سراسری خواهد بود. فلگ ویژه 'before=othersym' نماد جدید را درست پیش از نماد مشخصشده othersym درج میکند؛ در غیر این صورت نمادها به ترتیب حضور در خط فرمان، به انتهای جدول نمادها افزوده خواهند شد.
- --rename-section oldname=newname[,flags]
- نام بخشی را
از oldname به newname
تغییر
میدهد و در
صورت
تمایل،
فلگهای
بخش را نیز
در این
فرآیند به
flags تبدیل
میکند.
برتری این
روش نسبت به
استفاده از
اسکریپت
پیونددهنده
(Linker Script) در این
است که
خروجی
همچنان یک
فایل شیء
باقی
میماند و
به یک فایل
اجرایی
پیوندخورده
تبدیل
نمیشود.
این گزینه
همان
فلگهای
قابل قبول
در گزینه
--set-section-flags را
میپذیرد.
این گزینه بهویژه زمانی که قالب ورودی باینری خام است کاربرد فراوانی دارد، زیرا در قالب باینری همواره بخشی به نام .data ساخته میشود. اگر برای مثال بخواهید بهجای آن بخشی به نام .rodata حاوی دادههای باینری ایجاد کنید، میتوانید از خط فرمان زیر استفاده نمایید:
arm-none-eabi-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، نامهای طولانی در شیء ورودی بریده و کوتاه (Truncate) میشوند. گزینه enable تنها در صورتی نامهای طولانی صادر میکند که در ورودی وجود داشته باشند؛ این رفتار عمدتاً مشابه keep است، اما این مسئله که آیا گزینه enable ایجاد یک جدول رشتههای خالی را در فایل خروجی تحمیل میکند یا خیر، تعریفنشده باقی مانده است.
- --change-leading-char
- برخی قالبهای فایل شیء از نویسههای ویژهای در آغاز نام نمادها استفاده میکنند. متداولترین این نویسهها زیرخط (_) است که کامپایلرها غالباً پیش از هر نماد اضافه میکنند. این گزینه به arm-none-eabi-objcopy میگوید هنگام تبدیل میان قالبهای مختلف فایل شیء، نویسه آغازین نمادها را تغییر دهد. اگر قالبهای مبدأ و مقصد از نویسه آغازین یکسانی استفاده کنند، این گزینه اثری نخواهد داشت؛ در غیر این صورت، بر حسب نیاز نویسهای افزوده، حذف یا جایگزین میشود.
- --remove-leading-char
- چنانچه نخستین نویسه یک نماد سراسری، نویسه آغازین ویژهای باشد که توسط آن قالب فایل شیء استفاده میشود، آن نویسه را حذف میکند. معمولترین نویسه آغازین نماد، زیرخط (_) است. این گزینه زیرخط ابتدایی را از همه نمادهای سراسری حذف میکند. این قابلیت زمانی که میخواهید اشیائی از قالبهای مختلف با قراردادهای نامگذاری متفاوت را به هم پیوند دهید سودمند است. تفاوت این گزینه با --change-leading-char در این است که صرفنظر از قالب فایل خروجی، در هر صورت نویسه آغازین نماد را حذف میکند.
- --reverse-bytes=num
- بایتها را
در بخشی که
دارای
محتوای
خروجی است
معکوس
میکند. طول
بخش باید بر
مقدار
ارائهشده
بخشپذیر
باشد تا
جابهجایی
بایتها
صورت پذیرد.
این
معکوسسازی
پیش از
انجام
درهمتنی
(Interleaving) رخ
میدهد.
این گزینه معمولاً هنگام تولید ایمیجهای ROM برای سیستمهای هدف با رفتارهای خاص کاربرد دارد. برای مثال در برخی بردهای مقصد، کلمات ۳۲ بیتی واکشیشده از ROMهای ۸ بیتی بدون در نظر گرفتن ترتیب بایت پردازنده، به صورت کمارزشترین بایت نخست (Little-endian) بازچینی میشوند. بسته به مدل برنامهریزی، ممکن است تغییر ترتیب بایتهای حافظه ROM ضروری باشد.
یک فایل ساده با بخشی حاوی هشت بایت زیر را در نظر بگیرید:
12345678
با اعمال --reverse-bytes=2 برای مثال بالا، ترتیب بایتها در فایل خروجی به شکل
21436587
خواهد بود.با اعمال --reverse-bytes=4 برای همان مثال، ترتیب بایتها در خروجی به صورت
43218765
درمیآید.اگر ابتدا --reverse-bytes=2 و سپس روی فایل حاصل --reverse-bytes=4 اعمال شود، ترتیب بایتها در فایل خروجی دوم
34127856
خواهد بود. - --srec-len=ival
- تنها برای خروجی srec معنادار است. حداکثر طول رکوردهای اس (S-records) تولیدشده را روی ival تنظیم میکند. این طول شامل فیلدهای آدرس، داده و کد افزونگی چرخشی (CRC) میشود.
- --srec-forceS3
- تنها برای خروجی srec معنا دارد. از ایجاد رکوردهای S1 و S2 خودداری کرده و خروجی را صرفاً در قالب رکوردهای S3 تولید میکند.
- --redefine-sym old=new
- نام یک نماد را از old به new تغییر میدهد. این گزینه هنگامی که میخواهید دو ماژول باینری را بدون در دست داشتن کد منبع به یکدیگر پیوند دهید و تداخل نام (Name Collision) میان نمادها وجود دارد بسیار کارآمد است.
- --redefine-syms=filename
- گزینه --redefine-sym را روی هر جفتنماد "old new" فهرستشده در فایل filename اعمال میکند. فایل filename یک فایل متنی ساده با یک جفت نماد در هر خط است. توضیحات خطی میتوانند با نویسه هش (#) مشخص شوند. این گزینه میتواند بیش از یک بار درج گردد.
- --weaken
- کلیه نمادهای سراسری موجود در فایل را به نماد ضعیف (Weak) تبدیل میکند. این قابلیت هنگام ساخت فایلی که قرار است با گزینه -R پیونددهنده در کنار سایر اشیاء پیوند بخورد مفید است. این گزینه تنها زمانی کارایی دارد که قالب فایل شیء از نمادهای ضعیف پشتیبانی کند.
- --keep-symbols=filename
- گزینه --keep-symbol را برای هر نماد فهرستشده در فایل filename اعمال میکند. فایل filename یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. توضیحات با نویسه هش (#) مشخص میشوند. این گزینه میتواند چند بار وارد شود.
- --strip-symbols=filename
- گزینه --strip-symbol را برای تمام نمادهای فهرستشده در فایل filename اعمال میکند. این فایل متنی ساده در هر خط یک نام نماد دارد و توضیحات با علامت هش (#) مشخص میشوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-unneeded-symbols=filename
- گزینه --strip-unneeded-symbol را برای کلیه نمادهای مندرج در فایل filename اجرا میکند. ساختار فایل متنی ساده بوده و در هر خط یک نام نماد قرار دارد و خطوط توضیحات با علامت هش (#) آغاز میشوند. این گزینه میتواند بیش از یک بار استفاده شود.
- --keep-global-symbols=filename
- گزینه --keep-global-symbol را روی همه نمادهای موجود در فایل filename اعمال میکند. فایل یک قالب متنی ساده با یک نام نماد در هر خط است که توضیحات آن با علامت هش (#) مشخص میشود. این گزینه میتواند بیش از یک بار به کار رود.
- --localize-symbols=filename
- گزینه --localize-symbol را برای تکتک نمادهای درجشده در فایل filename اعمال مینماید. فایل یک سند متنی ساده با یک نام نماد در هر خط است و نویسه هش (#) آغازگر خطوط توضیحات خواهد بود. امکان درج چندباره این گزینه وجود دارد.
- --globalize-symbols=filename
- گزینه --globalize-symbol را روی نمادهای فهرستشده در فایل filename پیاده میکند. فایل متنی ساده است و در هر خط نام یک نماد ثبت میشود؛ توضیحات با نویسه هش (#) آغاز میشوند. این گزینه میتواند بیش از یک بار به کار رود. نکته: این گزینه را نمیتوان همزمان با -G یا --keep-global-symbol استفاده کرد.
- --weaken-symbols=filename
- گزینه --weaken-symbol را برای نمادهای موجود در فایل filename اعمال میکند. فایل متنی ساده و دارای یک نماد در هر خط است و کامنتها با نویسه هش (#) شروع میشوند. این گزینه میتواند بیش از یک بار قید شود.
- --alt-machine-code=index
- چنانچه معماری خروجی دارای کدهای ماشین جایگزین (Alternate Machine Codes) باشد، بهجای کد پیشفرض از کد شماره index استفاده میکند. این ویژگی زمانی مفید است که برای یک ماشین یک کد رسمی تعیین شده و زنجیره ابزار (Toolchain) از کد جدید پشتیبانی میکند، اما برنامههای دیگر همچنان به استفاده از کد پیشین وابسته هستند. در معماریهای مبتنی بر ELF، اگر کد جایگزین index وجود نداشته باشد، این مقدار بهصورت یک عدد مطلق در فیلد e_machine از هدر ELF ذخیره میشود.
- --writable-text
- بخش متنی (کد / Text) خروجی را بهعنوان قابل نوشتن (Writable) علامتگذاری میکند. این گزینه برای همه قالبهای فایل شیء معنادار نیست.
- --readonly-text
- بخش متنی (Text) خروجی را محافظتشده در برابر نوشتن (فقط خواندنی / Read-only) میکند. این گزینه در تمام قالبهای فایل شیء کاربرد ندارد.
- --pure
- فایل خروجی را بهعنوان صفحهبندی بر اساس تقاضا (Demand Paged) علامتگذاری میکند. این گزینه در همه قالبهای شیء قابل استفاده نیست.
- --impure
- فایل خروجی را بهعنوان ناخالص (Impure) علامت میزند. این گزینه برای تمامی قالبهای فایل شیء معنادار نیست.
- --prefix-symbols=string
- پیشوند string را به آغاز تمام نمادها در فایل خروجی میافزاید.
- --prefix-sections=string
- پیشوند string را به ابتدای نام تمام بخشها در فایل خروجی اضافه میکند.
- --prefix-alloc-sections=string
- رشته string را بهعنوان پیشوند به ابتدای نام تمام بخشهای تخصیصیافته (Allocated Sections) در فایل خروجی اضافه میکند.
- --add-gnu-debuglink=path-to-file
- یک بخش به
نام .gnu_debuglink
میسازد که
حاوی ارجاع
به مسیر path-to-file
است و آن را
به فایل
خروجی
اضافه
میکند.
نکته: فایل
در مسیر path-to-file
باید حتماً
وجود داشته
باشد؛ زیرا
بخشی از
فرآیند
افزودن .gnu_debuglink
شامل درج
مجموع
مقابلهای
(Checksum) محتوای
فایل
اطلاعات
اشکالزدایی
در این بخش
است.
اگر فایل اطلاعات اشکالزدایی در یک مسیر ساخته شده اما قرار است بعداً در مسیر دیگری نصب شود، هرگز از مسیر محل نصب آینده استفاده نکنید؛ زیرا گزینه --add-gnu-debuglink شکست خواهد خورد چون فایل هنوز در آن مسیر وجود ندارد. در عوض، فایل اطلاعات اشکالزدایی را در پوشه جاری قرار دهید و گزینه --add-gnu-debuglink را بدون هیچ نام پوشهای (صرفاً با نام فایل) به صورت زیر به کار ببرید:
arm-none-eabi-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 sections)
را در خروجی
حفظ میکند.
نکته: هدر بخشهای پاکسازیشده، از جمله اندازههای آنها، حفظ میشوند اما محتوای واقعی آنها دور ریخته میشود. حفظ هدر بخشها به سایر ابزارها امکان میدهد تا فایل حاوی اطلاعات دیباگ را با فایل اجرایی واقعی تطبیق دهند، حتی اگر آن فایل اجرایی به فضای آدرس دیگری منتقل شده باشد.
هدف از این گزینه، استفاده از آن همراه با --add-gnu-debuglink برای تولید یک باینری دوقسمتی است: نخست یک باینری سبک و پالایششده که فضای کمتری در حافظه RAM و دیسک اشغال میکند و دوم یک فایل اطلاعات اشکالزدایی که تنها در صورت نیاز به دیباگ فراخوانی میشود. مراحل پیشنهادی برای ساخت این فایلها بدین شرح است:
- 1.
- فایل اجرایی را طبق روال معمول پیوند دهید؛ با فرض اینکه نام آن "foo" باشد:
- 2.
- دستور arm-none-eabi-objcopy --only-keep-debug foo foo.dbg را اجرا کنید تا فایلی شامل اطلاعات اشکالزدایی ایجاد شود.
- 3.
- دستور arm-none-eabi-objcopy --strip-debug foo را اجرا کنید تا یک فایل اجرایی پالایششده حاصل شود.
- 4.
- دستور arm-none-eabi-objcopy --add-gnu-debuglink=foo.dbg foo را اجرا کنید تا پیوندی به فایل اطلاعات اشکالزدایی در فایل اجرایی پالایششده درج گردد.
نکته: انتخاب پسوند ".dbg" برای فایل دیباگ اختیاری است. همچنین مرحله --only-keep-debug اجباری نیست و میتوانید بهجای آن روش زیر را به کار ببرید:
- 1.
- فایل اجرایی را پیوند دهید.
- 2.
- فایل "foo" را به "foo.full" کپی کنید.
- 3.
- دستور arm-none-eabi-objcopy --strip-debug foo را اجرا کنید.
- 4.
- دستور arm-none-eabi-objcopy --add-gnu-debuglink=foo.full foo را اجرا نمایید.
یعنی فایلی که با --add-gnu-debuglink به آن اشاره میشود میتواند همان باینری اجرایی کامل باشد و لزوماً نباید فایلی باشد که توسط سوییچ --only-keep-debug ساخته شده است.
نکته: این سوییچ تنها برای فایلهای کاملاً پیوندخورده طراحی شده است. استفاده از آن روی فایلهای شیء که اطلاعات دیباگ در آنها ممکن است ناقص باشد منطقی نیست. افزون بر این، قابلیت gnu_debuglink در حال حاضر تنها از یک نام فایل حاوی اطلاعات اشکالزدایی پشتیبانی میکند، نه چندین نام فایل بهازای هر فایل شیء.
- --strip-dwo
- محتوای کلیه بخشهای DWARF .dwo را حذف کرده و سایر بخشهای اشکالزدایی و نمادها را دستنخورده باقی میگذارد. این گزینه برای استفاده کامپایلر در قالب سوییچ -gsplit-dwarf طراحی شده است؛ سوییچی که اطلاعات اشکالزدایی را میان فایل .o و یک فایل مجزای .dwo تفکیک میکند. کامپایلر تمام اطلاعات دیباگ را در یک فایل تولید کرده، سپس با استفاده از گزینه --extract-dwo بخشهای .dwo را درون فایل .dwo کپی میکند و سرانجام با سوییچ --strip-dwo آن بخشها را از فایل اصلی .o پاک مینماید.
- --extract-dwo
- محتوای کلیه بخشهای DWARF .dwo را استخراج میکند. برای اطلاعات بیشتر گزینه --strip-dwo را ببینید.
- --file-alignment num
- تراز فایل (File Alignment) را تعیین میکند. بخشهای فایل همواره در آفستهایی آغاز خواهند شد که مضربی از این عدد باشند. مقدار پیشفرض ۵۱۲ است. [این گزینه ویژه اهداف PE است.]
- --heap reserve
- --heap reserve,commit
- میزان بایتهای حافظه را جهت رزرو (و در صورت تمایل ثبت / Commit) برای هیپ (Heap) این برنامه مشخص میکند. [این گزینه ویژه اهداف PE است.]
- --image-base value
- مقدار value را بهعنوان آدرس پایه (Base Address) برنامه یا dll تعیین میکند. این آدرس پایینترین نقطه از حافظه است که هنگام بارگذاری برنامه یا dll استفاده میشود. برای کاهش نیاز به بازنشانی و افزایش کارایی dllها، هر کتابخانه باید یک آدرس پایه یکتا داشته باشد تا با سایر dllها همپوشانی پیدا نکند. مقدار پیشفرض برای فایلهای اجرایی 0x400000 و برای dllها 0x10000000 است. [این گزینه ویژه اهداف PE است.]
- --section-alignment num
- [این گزینه
ویژه اهداف
PE است.]
فیلد تراز بخش (Section Alignment) را در هدر PE (در صورت وجود در باینری) تنظیم میکند. بخشها در حافظه همواره از آدرسهایی آغاز میشوند که مضربی از این عدد باشند. مقدار پیشفرض 0x1000 است.
نکته: چنانچه آدرسهای LMA یا VMA یک بخش تراز نباشند و از طریق گزینههای --set-section-lma یا --set-section-vma تنظیم نشده باشند و فایل نیز بهطور کامل بازنشانی شده باشد، پیام هشداری صادر میشود؛ در این حالت تصمیمگیری درباره لزوم بهروزرسانی 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
- فلگهای بخشها و نمادهای فایل را حفظ کرده اما کلیه دادههای بخشها را حذف میکند. بهطور خاص، این گزینه:
- محتوای تمامی بخشها را پاک میکند.
- اندازه هر بخش را برابر صفر قرار میدهد.
- آدرس شروع فایل را صفر تنظیم میکند.
از این گزینه برای ساخت یک فایل .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
- شماره نگارش arm-none-eabi-objcopy را نمایش میدهد.
- --verilog-data-width=bytes
- برای خروجی وریلاگ (Verilog)، این گزینه تعداد بایتهای تبدیلشده برای هر عنصر داده خروجی را کنترل میکند. هدف ورودی، ترتیب بایت (Endianness) تبدیل را هدایت مینماید.
- -v
- --verbose
- خروجی با جزئیات کامل: فهرستی از کلیه فایلهای شیء تغییریافته ارائه میدهد. در مورد فایلهای آرشیو، arm-none-eabi-objcopy -v تمام اعضای آرشیو را فهرست میکند.
- --help
- نمایش خلاصهای از گزینههای arm-none-eabi-objcopy.
- --info
- نمایش فهرستی از کلیه معماریها و قالبهای شیء در دسترس.
- @file
- خواندن
گزینههای
خط فرمان از
file.
گزینههای
خواندهشده
دقیقاً در
جایگاه
آرگومان
اولیه @file
جایگزین
میشوند.
چنانچه
فایل وجود
نداشته
باشد یا
خوانده
نشود،
آرگومان
بهصورت
لفظی در نظر
گرفته شده و
حذف
نمیشود.
گزینهها در file با نویسههای فاصله خالی (Whitespace) تفکیک میشوند. اگر گزینهای نیاز به فاصله داشته باشد، میتوان کل گزینه را در نقلقول تکی یا جفتی محصور کرد. هر نویسهای (از جمله ممیز وارونه) را میتوان با گذاشتن یک ممیز وارونه (\) در پیش از آن وارد نمود. خود فایل نیز میتواند شامل گزینههای دیگری به صورت @file باشد که چنین گزینههایی بهشکل بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
ld(1), objdump(1) و مستندات Info برای binutils.
حق نشر (COPYRIGHT)
Copyright (c) 1991-2026 Free Software Foundation, Inc.
مجوز نسخه برداری، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License) نسخه ۱.۳ یا هر نسخه جدیدتر منتشرشده توسط بنیاد نرمافزارهای آزاد (FSF) اعطا میشود؛ بدون بخشهای تغییرناپذیر، بدون متنهای روی جلد و بدون متنهای پشت جلد. نسخهای از این مجوز در بخشی با عنوان "GNU Free Documentation License" درج شده است.
| 2026-07-30 | binutils-2.47 |