| OBJCOPY(1) | GNU Development Tools | OBJCOPY(1) |
نام (NAME)
loongarch64-linux-gnu-objcopy - کپی و تبدیل فرمت فایلهای شیء و باینری در معماری LoongArch64
خلاصه دستور (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 از کتابخانه GNU BFD برای خواندن و نوشتن فایلهای شیء استفاده میکند. این ابزار میتواند فایل شیء مقصد را با فرمتی متفاوت از فایل شیء مبدأ بنویسد. رفتار دقیق objcopy توسط گزینههای خط فرمان کنترل میشود. توجه داشته باشید که objcopy باید بتواند یک فایل کاملاً پیوندخورده (fully linked) را بین هر دو فرمتی کپی کند. با این حال، کپی کردن یک فایل شیء بازتخصیصپذیر (relocatable) بین دو فرمت ممکن است طبق انتظار کار نکند.
objcopy برای انجام تبدیلهای خود فایلهای موقتی میسازد و پس از اتمام کار آنها را حذف میکند. objcopy از BFD برای تمام کارهای تبدیل استفاده میکند؛ این ابزار به تمام فرمتهای تعریفشده در BFD دسترسی دارد و بنابراین میتواند بیشتر فرمتها را بدون نیاز به مشخص کردن صریح تشخیص دهد.
میتوان از objcopy برای تولید فایلهای S-record با تعیین مقصد خروجی srec استفاده کرد (مثلاً با استفاده از -O srec).
میتوان از objcopy برای تولید فایل خام باینری (raw binary) با تعیین مقصد خروجی binary استفاده کرد (مثلاً با استفاده از -O binary). هنگامی که objcopy یک فایل خام باینری تولید میکند، اساساً یک دامپ حافظه (memory dump) از محتویات فایل شیء ورودی ایجاد خواهد کرد. تمام نمادها و اطلاعات بازتخصیص دور ریخته میشوند. دامپ حافظه از آدرس بارگذاری پایینترین بخش (section) کپیشده در فایل خروجی شروع خواهد شد.
هنگام تولید یک S-record یا فایل خام باینری، استفاده از -S برای حذف بخشهای حاوی اطلاعات اشکالزدایی (debugging) میتواند مفید باشد. در برخی موارد استفاده از -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
- اطلاعات نمادها و بازتخصیصها را از فایل مبدأ کپی نمیکند. همچنین بخشهای اشکالزدایی (debug) را حذف میکند.
- -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، تمام نمادهایی را که دیدپذیری (visibility) مخفی (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 را سراسری میکند تا در خارج از فایلی که در آن تعریف شده قابل مشاهده باشد. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه نمیتواند همراه با گزینههای -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 فراتر رود.
این گزینه میتواند برای ساخت ایمیجهایی برای دو حافظه فلش 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 تعریف شده باشد. اگر تعریف شده باشد، از این متغیر به عنوان تاریخ ذخیرهشده در هدر (به صورت تعداد ثانیهها از مبدأ زمان یونیکس) استفاده خواهد شد.
- -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 با بایتهای خالی پر میکند (پدینگ). این کار با افزایش اندازه آخرین بخش انجام میشود. فضای اضافی با مقدار مشخصشده توسط --gap-fill (پیشفرض صفر) پر میشود.
- --set-start val
- آدرس شروع (که به عنوان آدرس ورود یا entry address نیز شناخته میشود) فایل جدید را روی val تنظیم میکند. همه فرمتهای فایل شیء از تنظیم آدرس شروع پشتیبانی نمیکنند.
- --change-start incr
- --adjust-start incr
- آدرس شروع (آدرس ورود) را با افزودن incr تغییر میدهد. همه فرمتهای فایل شیء از تنظیم آدرس شروع پشتیبانی نمیکنند.
- --change-addresses incr
- --adjust-vma incr
- آدرسهای VMA و LMA تمام بخشها و همچنین آدرس شروع را با افزودن incr تغییر میدهد. برخی از فرمتهای فایل شیء اجازه تغییر اختیاری آدرسهای بخش را نمیدهند. توجه داشته باشید که این کار بخشها را بازتخصیص نمیدهد؛ اگر برنامه انتظار داشته باشد بخشها در آدرس خاصی بارگذاری شوند و این گزینه به گونهای استفاده شود که بخشها در آدرس متفاوتی بارگذاری شوند، ممکن است اجرای برنامه با شکست مواجه شود.
- --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. پرچم مختص 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 است با این تفاوت که یک فایل قالببندیشده ایجاد نمیکند، بلکه صرفاً محتویات را به عنوان داده خام باینری و بدون اعمال هیچگونه بازتخصیص ذخیره میکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --update-section sectionname=filename
- محتویات
موجود بخش
با نام sectionname
را با
محتویات
فایل filename
جایگزین
میکند.
اندازه بخش
به اندازه
فایل تنظیم
خواهد شد.
پرچمهای
بخش برای
sectionname بدون
تغییر باقی
خواهند
ماند. برای
فایلهای
فرمت ELF،
نگاشت بخش
به سگمنت
نیز بدون
تغییر باقی
میماند،
چیزی که با
استفاده از
--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
- برخی از فرمتهای فایل شیء از کاراکترهای خاص در ابتدای نمادها استفاده میکنند. متداولترین کاراکتر از این دست، خط زیر (underscore) است که کامپایلرها معمولاً قبل از هر نماد اضافه میکنند. این گزینه به objcopy میگوید که هنگام تبدیل بین فرمتهای فایل شیء، کاراکتر آغازین هر نماد را تغییر دهد. اگر فرمتهای فایل شیء از همان کاراکتر آغازین استفاده کنند، این گزینه هیچ اثری ندارد. در غیر این صورت، بر حسب مورد، کاراکتری را اضافه، حذف یا تغییر میدهد.
- --remove-leading-char
- اگر اولین کاراکتر یک نماد سراسری، کاراکتر آغازین نماد ویژه مورد استفاده توسط فرمت فایل شیء باشد، آن کاراکتر را حذف میکند. متداولترین کاراکتر آغازین نماد، خط زیر (underscore) است. این گزینه یک خط زیر آغازین را از تمام نمادهای سراسری حذف میکند. این گزینه زمانی میتواند مفید باشد که بخواهید اشیایی با فرمتهای فایلی مختلف را که قراردادهای متفاوتی برای نامگذاری نمادها دارند به یکدیگر پیوند دهید. این گزینه با --change-leading-char تفاوت دارد زیرا بدون توجه به فرمت فایل شیء فایل خروجی، همیشه نام نماد را در صورت لزوم تغییر میدهد.
- --reverse-bytes=num
- بایتها را
در بخشی با
محتویات
خروجی
معکوس
میکند. طول
بخش باید بر
مقدار
دادهشده
بخشپذیر
باشد تا
امکان
جابجایی
وجود داشته
باشد.
معکوسسازی
قبل از
انجام
درهمآمیزی
انجام
میشود.
این گزینه معمولاً در تولید ایمیجهای 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 معنادار است. حداکثر طول Srecordهای تولیدشده را روی ival تنظیم میکند. این طول فیلدهای آدرس، داده و crc را پوشش میدهد.
- --srec-forceS3
- تنها برای خروجی srec معنادار است. از تولید رکوردهای S1/S2 جلوگیری کرده و فرمت رکوردی فقط S3 ایجاد میکند.
- --redefine-sym old=new
- نام نماد old را به new تغییر میدهد. این میتواند زمانی مفید باشد که قصد دارید دو مورد را که سورسکد آنها را ندارید و تداخل نام دارند به یکدیگر پیوند دهید.
- --redefine-syms=filename
- گزینه --redefine-sym را برای هر جفت نماد "old new" فهرستشده در فایل filename اعمال میکند. filename یک فایل متنی ساده با یک جفت نماد در هر خط است. توضیحات خطی میتوانند با کاراکتر هش (#) آغاز شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --weaken
- تمام نمادهای سراسری موجود در فایل را به ضعیف (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
- بخش متن خروجی را محافظتشده در برابر نوشتن (فقطخواندنی) میکند. این گزینه برای تمام فرمتهای فایل شیء معنادار نیست.
- --pure
- فایل خروجی را به عنوان صفحهبندیشده بر اساس تقاضا (demand paged) نشانهگذاری میکند. این گزینه برای تمام فرمتهای فایل شیء معنادار نیست.
- --impure
- فایل خروجی را به عنوان ناخالص (impure) نشانهگذاری میکند. این گزینه برای تمام فرمتهای فایل شیء معنادار نیست.
- --prefix-symbols=string
- پیشوند string را به ابتدای تمام نمادها در فایل خروجی اضافه میکند.
- --prefix-sections=string
- پیشوند string را به ابتدای تمام نامهای بخشها در فایل خروجی اضافه میکند.
- --prefix-alloc-sections=string
- پیشوند string را به ابتدای تمام نامهای بخشهای تخصیصیافته (allocated) در فایل خروجی اضافه میکند.
- --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) یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، نمادهای مشخصکننده نامهای بخشها را که در غیر این صورت حذف میشدند، نگه میدارد.
- --keep-file-symbols
- هنگام پاکسازی یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، نمادهای مشخصکننده نامهای فایلهای منبع را که در غیر این صورت حذف میشدند، نگه میدارد.
- --only-keep-debug
- یک فایل را
پاکسازی
میکند و
محتویات هر
بخشی را که
توسط --strip-debug
حذف
نمیشدند
حذف کرده و
بخشهای
اشکالزدایی
را
دستنخورده
باقی
میگذارد.
در
فایلهای
ELF، این
گزینه تمام
بخشهای
یادداشت (note sections)
را در خروجی
حفظ میکند.
نکته - هدرهای بخشهای پاکسازیشده، از جمله اندازه آنها، حفظ میشوند اما محتویات بخشها دور ریخته میشوند. هدرهای بخش حفظ میشوند تا سایر ابزارها بتوانند فایل debuginfo را با فایل اجرایی واقعی تطبیق دهند، حتی اگر آن فایل اجرایی به فضای آدرس متفاوتی جابهجا شده باشد.
هدف این است که از این گزینه در ترکیب با --add-gnu-debuglink برای ایجاد یک فایل اجرایی دو بخشی استفاده شود: یکی یک باینری پاکسازیشده (stripped) که فضای کمتری در RAM و در توزیع اشغال میکند، و دومی یک فایل حاوی اطلاعات اشکالزدایی که تنها در صورت نیاز به قابلیتهای اشکالزدایی لازم است. رویه پیشنهادی برای ایجاد این فایلها به شرح زیر است:
- 1.
- فایل اجرایی را به صورت عادی پیوند دهید. با فرض اینکه نام آن "foo" باشد، سپس...
- 2.
- دستور "objcopy --only-keep-debug foo foo.dbg" را برای ایجاد فایلی حاوی اطلاعات اشکالزدایی اجرا کنید.
- 3.
- دستور "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
- تراز فایل را مشخص میکند. بخشها در فایل همیشه از آفستهای فایلی شروع میشوند که مضربی از این عدد هستند. مقدار پیشفرض ۵۱۲ است. [این گزینه مختص مقصدهای 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
- تعداد بایتهای حافظه را برای رزرو کردن (و اختیاری متعهد کردن) جهت استفاده به عنوان پشته (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 از ABI مربوط به ELF فشرده میکند. نکته - اگر فشردهسازی در واقع باعث بزرگتر شدن یک بخش شود، فشرده نخواهد شد.
- --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، این گزینه تعداد بایتهای تبدیلشده برای هر عنصر داده خروجی را کنترل میکند. مقصد ورودی، ترتیب بایتها در تبدیل را کنترل میکند.
- -v
- --verbose
- خروجی پرجزئیات: تمام فایلهای شیء تغییریافته را فهرست میکند. در مورد آرشیوها، objcopy -V تمام اعضای آرشیو را فهرست میکند.
- --help
- خلاصهای از گزینههای objcopy را نمایش میدهد.
- --info
- فهرستی را نمایش میدهد که تمام معماریها و فرمتهای شیء در دسترس را نشان میدهد.
- @file
- گزینههای
خط فرمان را
از file
میخواند.
گزینههای
خواندهشده
به جای
گزینه اصلی
@file درج
میشوند.
اگر file وجود
نداشته
باشد یا
نتوان آن را
خواند، با
گزینه به
صورت
تحتاللفظی
رفتار
خواهد شد و
حذف
نمیشود.
گزینهها در file با فاصلههای خالی (whitespace) جدا میشوند. یک کاراکتر فاصله خالی میتواند با قرار دادن کل گزینه در گیومه تکی یا جفتی در یک گزینه گنجانده شود. هر کاراکتری (از جمله بکاسلش) میتواند با قرار دادن یک بکاسلش قبل از آن کاراکتر درج شود. خود file میتواند حاوی گزینههای @file اضافی باشد؛ هر یک از این گزینهها به صورت بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
ld(1)، objdump(1) و مدخلهای Info برای binutils.
حق نشر (COPYRIGHT)
حق نشر (c) ۱۹۹۱-۲۰۲۶ بنیاد نرمافزار آزاد (Free Software Foundation, Inc.)
مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه جدیدتر منتشر شده توسط بنیاد نرمافزار آزاد اعطا میشود؛ بدون بخشهای تغییرناپذیر، بدون متنهای جلد رویی و بدون متنهای جلد پشتی. نسخهای از این مجوز در بخشی با عنوان «GNU Free Documentation License» گنجانده شده است.
| 2026-08-26 | binutils-2.47 |