| 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]
[--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)
ابزار objcopy در گنو، محتویات یک فایل شیء (Object File) را درون فایلی دیگر کپی میکند. objcopy برای خواندن و نوشتن فایلهای شیء از کتابخانه BFD گنو (GNU BFD Library) بهره میبرد و میتواند فایل شیء مقصد را در قالبی متفاوت از فایل شیء مبدأ بنویسد. رفتار دقیق objcopy توسط گزینههای خط فرمان کنترل میشود. توجه داشته باشید که objcopy باید بتواند فایلی را که پیوند کامل خورده است (Fully Linked) بین هر دو قالب دلخواه کپی کند؛ با این حال، کپی کردن یک فایل شیء قابلبازنشانی (Relocatable) میان دو قالب گوناگون ممکن است آنطور که انتظار میرود عمل نکند.
دستور objcopy برای انجام تبدیلات خود فایلهای موقتی میسازد و پس از پایان کار آنها را حذف میکند. objcopy تمام کارهای تبدیل خود را با کتابخانه BFD انجام میدهد؛ بنابراین به کلیه قالبهای تعریفشده در BFD دسترسی دارد و میتواند بیشتر قالبها را بدون نیاز به معرفی صریح و خودکار شناسایی کند.
میتوان از objcopy برای تولید رکوردهای اس (S-records) استفاده کرد؛ برای این کار کافی است هدف خروجی روی srec تنظیم شود (مانند -O srec).
از objcopy میتوان برای ایجاد یک فایل باینری خام با تعیین هدف خروجی روی binary استفاده کرد (مانند -O binary). هنگامی که objcopy یک فایل باینری خام تولید میکند، در عمل یک رونوشت حافظه (Memory Dump) از محتویات فایل شیء ورودی به دست میدهد. در این حالت کلیه نمادها و اطلاعات بازنشانی دور ریخته میشوند و تخلیه حافظه از آدرس بارگذاری پایینترین بخشی که در فایل خروجی کپی میشود آغاز خواهد شد.
هنگام تولید رکورد اس یا فایل باینری خام، استفاده از گزینه -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 تنظیم میشود. اگر فایل ورودی خود معماری شناختهشدهای داشته باشد، این گزینه نادیده گرفته خواهد شد. درون یک برنامه میتوان با ارجاع به نمادهای ویژهای که در این فرآیند تبدیل ساخته میشوند، به این دادههای باینری دسترسی پیدا کرد. این نمادها به نامهای _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 را از پرونده مبدأ رونوشت نکنید، مگر اینکه برای یک بازآرایی (relocation) مورد نیاز باشد. این گزینه میتواند بیش از یک بار مشخص شود.
- -G symbolname
- --keep-global-symbol=symbolname
- تنها نماد symbolname را سراسری (global) نگه دارید. همه نمادهای دیگر را محلی پرونده کنید تا از بیرون قابل مشاهده نباشند. این گزینه میتواند بیش از یک بار مشخص شود. توجه: این گزینه نمیتواند همراه با گزینههای --globalize-symbol یا --globalize-symbols به کار رود.
- --localize-hidden
- در یک شیء ELF، تمام نمادهایی را که سطح نمایانیِ نهان (hidden) یا درونی (internal) دارند، به عنوان محلی علامتگذاری کنید. این گزینه افزون بر گزینههای محلیسازی مختص هر نماد مانند -L اعمال میشود.
- -L symbolname
- --localize-symbol=symbolname
- نماد سراسری یا ضعیف (weak) به نام symbolname را به یک نماد محلی تبدیل کنید تا از بیرون قابل مشاهده نباشد. این گزینه میتواند بیش از یک بار مشخص شود. نکته: نمادهای یکتا (unique) تبدیل نمیشوند.
- -W symbolname
- --weaken-symbol=symbolname
- نماد symbolname را به یک نماد ضعیف (weak) تبدیل کنید. این گزینه میتواند بیش از یک بار مشخص شود.
- --binary-symbol-prefix=string
- هنگامی که
همراه با
--input-target=binary
استفاده
شود، string را
به عنوان
نام پایه
نمادهای
تولیدشده
برای
پرونده
ورودی
تعیین
میکند. این
نمادها
عبارتند از:
<string>_start <string>_end <string>_size
به طور پیشفرض، گرداننده ورودی باینری نام پیشوند نماد را از نسخه درهمپیچیده (mangled) نام پرونده ورودی و پیشوند _binary به دست میآورد. این گزینه امکان تعیین صریح آن را فراهم میکند.
- --globalize-symbol=symbolname
- به نماد symbolname دامنه دید سراسری (global) بدهید تا بیرون از پروندهای که در آن تعریف شده است، قابل مشاهده باشد. این گزینه میتواند بیش از یک بار مشخص شود. توجه: این گزینه نمیتواند همراه با گزینههای -G یا --keep-global-symbol استفاده شود.
- -w
- --wildcard
- اجازه
استفاده از
عبارتهای
باقاعده (regular
expressions) را در
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 فراتر رود.
این گزینه میتواند برای ساخت تصویر (image) برای دو حافظه فلش 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ها، و
برچسبهای
زمان صفر
قرار داده،
و برای تمام
پروندهها
از
حالتهای
پرونده (file modes)
یکسان
استفاده
کنید.
اگر binutils با --enable-deterministic-archives پیکربندی شده باشد، این حالت به طور پیشفرض فعال است. میتوان آن را با گزینه -U در زیر غیرفعال کرد.
- -U
- --disable-deterministic-archives
- در حالت
معین (deterministic)
عمل نکنید.
این برعکس
گزینه -D در
بالا است:
هنگام
رونوشت
اعضای
آرشیو و
نوشتن
نمایه
آرشیو، از
مقادیر
واقعی UID، GID،
برچسب زمان
و حالتهای
پرونده
استفاده
کنید.
این حالت پیشفرض است مگر اینکه binutils با --enable-deterministic-archives پیکربندی شده باشد.
- --debugging
- اطلاعات اشکالزدایی (debugging) را در صورت امکان تبدیل کنید. این حالت پیشفرض نیست، زیرا تنها قالبهای اشکالزدایی خاصی پشتیبانی میشوند و فرایند تبدیل میتواند زمانبر باشد.
- --gap-fill val
- شکافهای میان بخشها (sections) را با 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 است، با این تفاوت که پروندهای قالببندیشده نمیسازد، بلکه محتویات را بهصورت دادههای دودویی خام و بدون اِعمال هیچگونه بازنشانی تخلیه میکند. این گزینه را میتوان بیش از یک بار مشخص کرد.
- --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 تغییر
دهد. مزیت
این کار
نسبت به
استفاده از
اسکریپت
پیونددهنده
جهت انجام
تغییر نام
این است که
خروجی
همچنان
بهصورت یک
پروندهٔ
شیء باقی
میماند و
به یک
پروندهٔ
اجراییِ
پیوندخورده
تبدیل
نمیشود.
این گزینه
همان
مجموعه
پرچمهای
گزینهٔ
--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 در حال اجرا باشد، هرگونه نام طولانیِ بخش در شیء ورودی بریده و کوتاه (Truncate) خواهد شد. گزینهٔ enable تنها در صورتی نامهای طولانی بخش را صادر میکند که در ورودیها وجود داشته باشند؛ این رفتار تا حد زیادی مانند keep است، اما این مسئله که آیا گزینهٔ enable ممکن است ایجاد یک جدول رشتهٔ خالی را در پروندهٔ خروجی تحمیل کند یا خیر، تعریفنشده رها شده است.
- --change-leading-char
- برخی قالبهای پروندهٔ شیء از نویسههای ویژهای در آغاز نمادها استفاده میکنند. رایجترین چنین نویسهای زیرخط (_) است که کامپایلرها غالباً آن را پیش از هر نماد میافزایند. این گزینه به 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 (یا Srecords) تولیدشده را روی ival تنظیم میکند. این طول شامل هر دو فیلد آدرس، داده و crc میشود.
- --srec-forceS3
- تنها برای خروجی srec معنا دارد. از ایجاد رکوردهای S1/S2 خودداری کرده و قالب رکورد را صرفاً به صورت S3 ایجاد میکند.
- --redefine-sym old=new
- نام یک نماد را از old به new تغییر میدهد. این گزینه هنگامی که میخواهید دو مؤلفه را بدون در دست داشتن کد منبع به یکدیگر پیوند دهید و تداخل نام وجود دارد، میتواند مفید باشد.
- --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 اعمال میکند. فایل 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
- بخش متن (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 شامل درج
مجموع
مقابلهای
(checksum) از
محتوای
فایل
اطلاعات
اشکالزدایی
در این بخش
است.
اگر فایل اطلاعات اشکالزدایی در یک مکان ساخته شده اما قرار است بعداً در مکان متفاوتی نصب شود، از مسیر محل نصب استفاده نکنید. گزینه --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 sections)
را در خروجی
حفظ میکند.
نکته - سرآیندهای بخشهای پالایششده، از جمله اندازههای آنها، حفظ میشوند اما محتوای واقعی بخشها دور ریخته میشود. سرآیندهای بخش حفظ میشوند تا سایر ابزارها بتوانند فایل debuginfo را با فایل اجرایی واقعی تطبیق دهند، حتی اگر آن فایل اجرایی به فضای آدرس متفاوتی جابهجا شده باشد.
هدف این است که از این گزینه همراه با --add-gnu-debuglink برای ساخت یک فایل اجرایی دوقسمتی استفاده شود: یکی باینری پالایششده که فضای کمتری در RAM و در توزیع اشغال میکند، و دومی یک فایل اطلاعات اشکالزدایی که تنها در صورت نیاز به قابلیتهای اشکالزدایی ضرورت دارد. روش پیشنهادی برای ایجاد این فایلها به شرح زیر است:
- 1.
- فایل اجرایی را طبق روال معمول پیوند دهید. با فرض اینکه نام آن "foo" باشد، سپس...
- 2.
- برای ایجاد پروندهای حاوی اطلاعات اشکالزدایی دستور "objcopy --only-keep-debug foo foo.dbg" را اجرا کنید.
- 3.
- برای ایجاد یک پرونده اجرایی پیراسته (stripped)، دستور "objcopy --strip-debug foo" را اجرا کنید.
- 4.
- برای افزودن پیوند به اطلاعات اشکالزدایی در پرونده اجرایی پیراسته، دستور "objcopy --add-gnu-debuglink=foo.dbg foo" را اجرا کنید.
نکته---انتخاب پسوند ".dbg" برای پرونده اطلاعات اشکالزدایی دلخواه است. همچنین مرحله "--only-keep-debug" اختیاری است. در عوض میتوانید چنین عمل کنید:
- 1.
- پرونده اجرایی را به روال معمول پیوند دهید.
- 2.
- رونوشتی از "foo" در "foo.full" تهیه کنید.
- 3.
- دستور "objcopy --strip-debug foo" را اجرا کنید.
- 4.
- دستور "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
- همترازی پرونده را مشخص میکند. بخشها در پرونده همواره در آفستهایی از پرونده آغاز خواهند شد که مضربی از این عدد باشند. مقدار پیشفرض آن 512 است. [این گزینه ویژه مقاصد PE است.]
- --heap reserve
- --heap reserve,commit
- تعداد بایتهای حافظه را برای رزرو (و در صورت تمایل تخصیص/commit) جهت استفاده به عنوان هیپ (heap) برای این برنامه مشخص میکند. [این گزینه ویژه مقاصد PE است.]
- --image-base value
- مقدار value را به عنوان نشانی پایه برنامه یا dll شما به کار میگیرد. این پایینترین مکان حافظه است که هنگام بارگذاری برنامه یا dll شما استفاده خواهد شد. برای کاهش نیاز به بازنشانی و بهبود کارایی dllهای شما، هر یک باید نشانی پایه یکتایی داشته باشند و با هیچ dll دیگری همپوشانی نداشته باشند. مقدار پیشفرض برای پروندههای اجرایی 0x400000 و برای dllها 0x10000000 است. [این گزینه ویژه مقاصد PE است.]
- --section-alignment num
- [این گزینه
ویژه مقاصد
PE است.]
فیلد همترازی بخشها در سرایند 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، این گزینهها تعیین میکنند که آیا نمادهای عمومی باید به نوع "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 با نویسهٔ فاصله جدا میشوند. یک نویسهٔ فاصله میتواند با قرار دادن کل گزینه درون علامت نقلقول تکی یا جفتی در گزینه گنجانده شود. هر نویسهای (از جمله ممیز وارونه) را میتوان با افزودن یک ممیز وارونه به عنوان پیشوند به آن گنجاند. خود file ممکن است شامل گزینههای @file بیشتری باشد؛ چنین گزینههایی به صورت بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
ld(1)، objdump(1) و مدخلهای Info برای binutils.
حق نشر (COPYRIGHT)
حق نشر (c) 1991-2026 Free Software Foundation, Inc.
اجازهٔ رونوشتبرداری، توزیع و/یا ویرایش این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، ویرایش ۱.۳ یا هر ویرایش پسین منتشرشده توسط بنیاد نرمافزار آزاد اعطا میشود؛ بدون بخشهای ناوردا، بدون متنهای روی جلد، و بدون متنهای پشت جلد. یک نسخه از این مجوز در بخشی با عنوان "GNU Free Documentation License" گنجانده شده است.
| 2026-07-30 | binutils-2.47 |