| 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].SH
"توضیحات
(DESCRIPTION)" ابزار objcopy
گنو
محتویات یک
فایل شیء (object file)
را به فایل
دیگری
رونوشت
میکند. objcopy
برای
خواندن و
نوشتن
فایلهای
شیء از
کتابخانهٔ GNU
BFD استفاده
میکند. این
ابزار
میتواند
فایل شیء
مقصد را در
قالبی
متفاوت از
قالب فایل
شیء مبدأ
بنویسد.
رفتار دقیق
objcopy توسط
گزینههای
خط فرمان
کنترل
میشود.
توجه داشته
باشید که objcopy
باید
بتواند یک
فایل
کاملاً
پیوندخورده
را میان هر
دو قالبی
کپی کند. با
این حال،
کپی کردن یک
فایل شیء با
قابلیت
بازنشانی
(relocatable) میان هر
دو قالبی
ممکن است
مطابق
انتظار عمل
نکند.
objcopy برای انجام تبدیلهای خود فایلهای موقت ایجاد کرده و پس از اتمام کار آنها را حذف میکند. objcopy از BFD برای انجام تمامی کارهای تبدیل خود استفاده میکند؛ این ابزار به تمامی قالبهای توصیفشده در BFD دسترسی دارد و بنابراین قادر است بیشتر قالبها را بدون مشخص کردن صریح آنها شناسایی کند.
میتوان از objcopy برای تولید رکوردهای S (یا S-records) با استفاده از یک هدف خروجی srec استفاده کرد (برای نمونه، با استفاده از -O srec).
میتوان از objcopy برای تولید یک فایل باینری خام با استفاده از یک هدف خروجی binary استفاده کرد (برای نمونه، با استفاده از -O 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
- تنها
بخشهای
مشخصشده
را از فایل
ورودی به
فایل خروجی
کپی میکند.
این گزینه
را میتوان
بیش از یک
بار مشخص
کرد. توجه
داشته
باشید که
استفادهٔ
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند.
نویسههای
عامهنما
(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
- سرایند بخشها را حذف میکند. این گزینه مختص فایلهای ELF است. بهطور ضمنی گزینههای --strip-all و --merge-notes را نیز اعمال میکند.
- -S
- --strip-all
- اطلاعات بازنشانی و نمادها را از فایل مبدأ کپی نمیکند. همچنین بخشهای اشکالزدایی را حذف میکند..IP -g 4
- --strip-debug
- نمادها یا بخشهای اشکالزدایی (debugging) را از فایل مبدأ رونوشت نمیکند.
- --strip-unneeded
- علاوه بر نمادها و بخشهای اشکالزدایی حذفشده توسط --strip-debug، تمام نمادهایی را که برای پردازش بازنشانی (relocation) مورد نیاز نیستند حذف میکند.
- -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 را سراسری نگه میدارد. تمام نمادهای دیگر را برای فایل محلی میکند تا از بیرون قابل مشاهده نباشند. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه را نمیتوان همراه با گزینههای --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*
باعث میشود objcopy تمام نمادهایی را که با "fo" شروع میشوند، به جز نماد "foo"، ضعیف کند.
- -x
- --discard-all
- نمادهای غیرسراسری را از فایل مبدأ رونوشت نمیکند.
- -X
- --discard-locals
- نمادهای محلی تولیدشده توسط کامپایلر را رونوشت نمیکند. (این نمادها معمولاً با L یا . آغاز میشوند.)
- -b byte
- --byte=byte
- اگر درهمتنیدگی از طریق گزینه --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 فراتر رود.
این گزینه میتواند برای ایجاد ایمیجها برای دو حافظه فلش ۱۶ بیتی درهمتنیده در یک گذرگاه ۳۲ بیتی، با ارسال -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
- در حالت deterministic
(معین) کار
نمیکند.
این برعکس
گزینهٔ -D
در بالا
است: هنگام
کپی کردن
اعضای
آرشیو و
نوشتن
نمایهٔ
آرشیو، از
مقادیر
واقعی UID، GID،
برچسب
زمانی و
حالت فایل
آنها
استفاده
میکند.
این حالت پیشفرض است، مگر اینکه binutils با --enable-deterministic-archives پیکربندی شده باشد.
- --debugging
- در صورت امکان، اطلاعات اشکالزدایی (debugging) را تبدیل میکند. این حالت پیشفرض نیست زیرا تنها قالبهای اشکالزدایی خاصی پشتیبانی میشوند و فرآیند تبدیل میتواند زمانبر باشد.
- --gap-fill val
- شکافهای بین بخشها (sections) را با val پر میکند. این عملیات روی load address (آدرس بارگذاری یا LMA) بخشها اعمال میشود. این کار با افزایش اندازهٔ بخشی که آدرس پایینتری دارد و پر کردن فضای اضافهٔ ایجادشده با val انجام میشود.
- --pad-to address
- فایل خروجی را تا آدرس بارگذاری address پد (pad) میکند. این کار با افزایش اندازهٔ آخرین بخش انجام میشود. فضای اضافی با مقدار مشخصشده توسط --gap-fill (پیشفرض صفر) پر میشود.
- --set-start val
- آدرس شروع (که به عنوان آدرس ورودی یا entry address نیز شناخته میشود) فایل جدید را روی val تنظیم میکند. همهٔ قالبهای فایل شیء (object file) از تنظیم آدرس شروع پشتیبانی نمیکنند.
- --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 بخشها در یک باینری کاملاً پیوندخورده (fully linked) میتواند خطرناک باشد، زیرا ممکن است کدهایی وجود داشته باشند که انتظار دارند بخشها در آدرس قدیمی خود قرار داشته باشند.
- --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 کاربردی ندارد. پرچم ویژهٔ ELF x86-64 با نام large متناظر با 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 ارسال کنید..IP "--add-symbol name=[section:]value[,flags]" 4 هنگام رونوشت فایل، یک نماد جدید با نام name اضافه میکند. این گزینه میتواند چندین بار مشخص شود. اگر section مشخص شده باشد، نماد مرتبط با آن بخش و نسبت به آن تعریف میشود؛ در غیر این صورت یک نماد ABS خواهد بود. تعیین یک بخش تعریفنشده منجر به خطای مهلک خواهد شد. هیچ بررسی روی مقدار انجام نمیشود و دقیقاً همانگونه که مشخص شده پذیرفته میشود. پرچمهای نماد را میتوان مشخص کرد، اما همه پرچمها برای تمامی قالبهای فایل شیء معنادار نخواهند بود. بهطور پیشفرض، نماد سراسری (global) خواهد بود. پرچم ویژه 'before=othersym' نماد جدید را پیش از othersym مشخصشده درج میکند، در غیر این صورت نماد(ها) به همان ترتیبی که ظاهر میشوند در انتهای جدول نمادها اضافه خواهند شد.
- --rename-section oldname=newname[,flags]
- نام یک بخش
را از oldname به
newname تغییر
میدهد، و
در حین
فرآیند،
بهصورت
اختیاری
پرچمهای
بخش را به flags
تغییر
میدهد. این
کار نسبت به
استفاده از
اسکریپت
پیونددهنده
(linker script) برای
تغییر نام،
این مزیت را
دارد که
خروجی به
صورت یک
فایل شیء
باقی
میماند و
به یک فایل
اجرایی
پیوندیافته
تبدیل
نمیشود.
این گزینه
همان
مجموعه
پرچمهای
گزینه --set-section-flags
را
میپذیرد.
این گزینه به ویژه زمانی مفید است که قالب ورودی دودویی (binary) باشد، زیرا در این حالت همیشه بخشی با نام .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 مرتب خواهند شد.
- --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اُم استفاده میکند. این ویژگی زمانی مفید است که برای یک ماشین کد رسمی اختصاص داده شده و زنجیره ابزار (toolchain) از کد جدید استفاده کند، اما برنامههای دیگر همچنان وابسته به کد اولیه باشند. برای معماریهای مبتنی بر ELF، اگر جایگزین index وجود نداشته باشد، این مقدار به عنوان یک عدد مطلق برای ذخیرهسازی در فیلد e_machine از سرآیند ELF در نظر گرفته میشود.
- --writable-text
- بخش کد خروجی (text) را به صورت قابل نوشتن علامتگذاری میکند. این گزینه برای همه قالبهای فایل شیء معنادار نیست.
- --readonly-text
- بخش کد خروجی (text) را در برابر نوشتن محافظت میکند (فقطخواندنی). این گزینه برای همه قالبهای فایل شیء معنادار نیست.
- --pure
- فایل خروجی را به عنوان demand paged (صفحهبندی بر اساس تقاضا) علامتگذاری میکند. این گزینه برای همه قالبهای فایل شیء معنادار نیست.
- --impure
- فایل خروجی را به عنوان impure علامتگذاری میکند. این گزینه برای همه قالبهای فایل شیء معنادار نیست..IP --prefix-symbols=string 4 پیشوند قرار دادن 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 کردن یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، نمادهای مشخصکنندهٔ نام بخشها که در غیر این صورت حذف میشدند را حفظ میکند.
- --keep-file-symbols
- هنگام strip کردن یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، نمادهای مشخصکنندهٔ نام فایلهای منبع که در غیر این صورت حذف میشدند را حفظ میکند.
- --only-keep-debug
- یک فایل را strip
میکند، به
طوری که
محتویات هر
بخشی را که
توسط --strip-debug
حذف
نمیشود
پاک کرده و
بخشهای
اشکالزدایی
را
دستنخورده
باقی
میگذارد.
در
فایلهای
ELF، این
گزینه تمام
بخشهای note
را در خروجی
حفظ میکند.
نکته - سرایندهای بخشهای خالیشده (stripped)، شامل اندازههای آنها، حفظ میشوند، اما محتویات بخش دور ریخته میشود. سرایندهای بخش از این جهت حفظ میشوند تا ابزارهای دیگر بتوانند فایل debuginfo را با فایل اجرایی واقعی تطبیق دهند، حتی اگر آن فایل اجرایی به فضای آدرس متفاوتی بازنشانی شده باشد.
هدف این است که از این گزینه به همراه --add-gnu-debuglink برای ایجاد یک فایل اجرایی دو بخشی استفاده شود: یکی باینری strip شده که فضای کمتری را در RAM و در توزیع اشغال میکند، و دومی فایلی حاوی اطلاعات اشکالزدایی که تنها در صورت نیاز به قابلیتهای اشکالزدایی به آن احتیاج است. رویهٔ پیشنهادی برای ایجاد این فایلها به شرح زیر است:
- 1.
- فایل اجرایی را به روال معمول پیوند دهید. با فرض اینکه نام آن "foo" باشد، سپس...
- 2.
- دستور "objcopy --only-keep-debug foo foo.dbg" را برای ایجاد فایلی حاوی اطلاعات اشکالزدایی اجرا کنید.
- 3.
- دستور "objcopy --strip-debug foo" را برای ایجاد یک فایل اجرایی strip شده اجرا کنید.
- 4.
- دستور "objcopy --add-gnu-debuglink=foo.dbg foo" را برای افزودن پیوندی به اطلاعات اشکالزدایی در فایل اجرایی strip شده اجرا کنید.
نکته---انتخاب ".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 ایجاد شده است.
نکته---این سوییچ فقط برای استفاده روی فایلهای کاملاً پیوندیافته (fully linked) در نظر گرفته شده است. استفاده از آن روی فایلهای شیء (object files) که ممکن است اطلاعات اشکالزداییشان ناکامل باشد، منطقی نیست. به علاوه، قابلیت gnu_debuglink در حال حاضر تنها از وجود یک نام فایل حاوی اطلاعات اشکالزدایی پشتیبانی میکند، نه چندین نام فایل به ازای هر فایل شیء.
- --strip-dwo
- محتویات تمام بخشهای .dwo مربوط به DWARF را حذف میکند، در حالی که باقی بخشهای اشکالزدایی و تمام نمادها دستنخورده باقی میمانند. این گزینه برای استفاده توسط کامپایلر به عنوان بخشی از گزینهٔ -gsplit-dwarf در نظر گرفته شده است، که اطلاعات اشکالزدایی را بین فایل .o و یک فایل جداگانهٔ .dwo تقسیم میکند. کامپایلر ابتدا تمام اطلاعات اشکالزدایی را در همان فایل تولید میکند، سپس از گزینهٔ --extract-dwo برای کپی کردن بخشهای .dwo به فایل .dwo و سپس از گزینهٔ --strip-dwo برای حذف آن بخشها از فایل اصلی .o استفاده میکند.
- --extract-dwo
- محتویات تمام بخشهای .dwo مربوط به DWARF را استخراج میکند. برای اطلاعات بیشتر گزینهٔ --strip-dwo را ببینید.
- --file-alignment num
- تراز فایل (file alignment) را مشخص میکند. بخشها در فایل همیشه در آفستهایی آغاز خواهند شد که مضربی از این عدد هستند. مقدار پیشفرض ۵۱۲ است. [این گزینه مختص هدفهای 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 تنظیم نشده باشند، و فایل به طور کامل بازنشانی شده باشد، پیام هشداری صادر خواهد شد. آنگاه تصمیمگیری دربارهٔ نیاز به بهروزرسانی 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
- نمایش شماره نسخه objcopy.
- --verilog-data-width=bytes
- برای خروجی Verilog، این گزینه تعداد بایتهای تبدیلشده برای هر عنصر داده خروجی را کنترل میکند. هدف ورودی (input target)، ترتیب بایتها (endianness) در تبدیل را تعیین میکند.
- -v
- --verbose
- خروجی پرحرّافی: فهرست کردن تمامی فایلهای شیء اصلاحشده. در مورد آرشیوها، objcopy -V تمامی اعضای آرشیو را فهرست میکند.
- --help
- نمایش خلاصهای از گزینههای objcopy.
- --info
- نمایش فهرستی از تمامی معماریها و قالبهای شیء در دسترس.
- @file
- گزینههای
خط فرمان را
از file
میخواند.
گزینههای
خواندهشده
به جای
گزینه اصلی
@file درج
میشوند.
اگر file وجود
نداشته
باشد، یا
نتوان آن را
خواند، با
این گزینه
به صورت
لفظی
برخورد شده
و حذف
نخواهد شد.
گزینهها در file با نویسههای فاصلهساز از یکدیگر جدا میشوند. یک نویسه فاصلهساز میتواند با قرار گرفتن کل گزینه در داخل علامت نقلقول تکی یا دوتایی در آن گنجانده شود. هر نویسهای (از جمله ممیز وارونه) را میتوان با پیشوند کردن یک علامت ممیز وارونه قبل از آن وارد کرد. خود file میتواند شامل گزینههای @file اضافی نیز باشد؛ هر یک از این گزینهها به صورت بازگشتی پردازش خواهند شد..SH "همچنین ببینید (SEE ALSO)" ld(1)، objdump(1)، و مدخلهای Info برای binutils.
کپیرایت و تکثیر (COPYRIGHT)
Copyright (c) 1991-2026 Free Software Foundation, Inc.
اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخهٔ 1.3 یا هر نسخهٔ متأخر دیگری که توسط بنیاد نرمافزارهای آزاد منتشر شده است، اعطا میشود؛ بدون بخشهای تغییرناپذیر (Invariant Sections)، بدون متون روی جلد (Front-Cover Texts)، و بدون متون پشت جلد (Back-Cover Texts). نسخهای از این مجوز در بخشی با عنوان «GNU Free Documentation License» گنجانده شده است.
| 2026-08-03 | binutils-2.47 |