| OBJCOPY(1) | GNU Development Tools | OBJCOPY(1) |
نام (NAME)
objcopy - رونوشت و تبدیل فایلهای شیء
خلاصه دستور (SYNOPSIS)
objcopy [-F bfdname|--target=bfdname]
[-I bfdname|--input-target=bfdname]
[-O bfdname|--output-target=bfdname]
[-B bfdarch|--binary-architecture=bfdarch]
[-S|--strip-all]
[-g|--strip-debug]
[--strip-unneeded]
[-K symbolname|--keep-symbol=symbolname]
[--keep-file-symbols]
[--keep-section-symbols]
[-N symbolname|--strip-symbol=symbolname]
[--strip-unneeded-symbol=symbolname]
[-G symbolname|--keep-global-symbol=symbolname]
[--localize-hidden]
[-L symbolname|--localize-symbol=symbolname]
[--globalize-symbol=symbolname]
[--globalize-symbols=filename]
[-W symbolname|--weaken-symbol=symbolname]
[-w|--wildcard]
[-x|--discard-all]
[-X|--discard-locals]
[-b byte|--byte=byte]
[-i [breadth]|--interleave[=breadth]]
[--interleave-width=width]
[-j sectionpattern|--only-section=sectionpattern]
[-R
sectionpattern|--remove-section=sectionpattern]
[--keep-section=sectionpattern]
[--remove-relocations=sectionpattern]
[--strip-section-headers]
[-p|--preserve-dates]
[-D|--enable-deterministic-archives]
[-U|--disable-deterministic-archives]
[--debugging]
[--gap-fill=val]
[--pad-to=address]
[--set-start=val]
[--adjust-start=incr]
[--change-addresses=incr]
[--change-section-address sectionpattern{=,+,-}val]
[--change-section-lma sectionpattern{=,+,-}val]
[--change-section-vma sectionpattern{=,+,-}val]
[--change-warnings] [--no-change-warnings]
[--set-section-flags sectionpattern=flags]
[--set-section-alignment sectionpattern=align]
[--add-section sectionname=filename]
[--dump-section sectionname=filename]
[--update-section sectionname=filename]
[--rename-section oldname=newname[,flags]]
[--long-section-names {enable,disable,keep}]
[--change-leading-char] [--remove-leading-char]
[--reverse-bytes=num]
[--srec-len=ival] [--srec-forceS3]
[--redefine-sym old=new]
[--redefine-syms=filename]
[--weaken]
[--keep-symbols=filename]
[--strip-symbols=filename]
[--strip-unneeded-symbols=filename]
[--keep-global-symbols=filename]
[--localize-symbols=filename]
[--weaken-symbols=filename]
[--add-symbol
name=[section:]value[,flags]]
[--alt-machine-code=index]
[--prefix-symbols=string]
[--prefix-sections=string]
[--prefix-alloc-sections=string]
[--add-gnu-debuglink=path-to-file]
[--only-keep-debug]
[--strip-dwo]
[--extract-dwo]
[--extract-symbol]
[--writable-text]
[--readonly-text]
[--pure]
[--impure]
[--file-alignment=num]
[--heap=reserve[,commit]]
[--image-base=address]
[--section-alignment=num]
[--stack=reserve[,commit]]
[--subsystem=which:major.minor]
[--compress-debug-sections]
[--decompress-debug-sections]
[--elf-stt-common=val]
[--merge-notes]
[--no-merge-notes]
[--verilog-data-width=val]
[-v|--verbose]
[-V|--version]
[--help] [--info]
infile [outfile].SH
"توضیحات
(DESCRIPTION)" ابزار GNU
objcopy محتویات
یک فایل شیء
(object file) را به
فایلی دیگر
کپی میکند.
objcopy برای
خواندن و
نوشتن
فایلهای
شیء از
کتابخانه GNU BFD
استفاده
میکند. این
ابزار
میتواند
فایل شیء
مقصد را در
قالبی
متفاوت از
فایل شیء
مبدأ ذخیره
کند. رفتار
دقیق objcopy
توسط
گزینههای
خط فرمان
کنترل
میشود.
توجه داشته
باشید که objcopy
باید
بتواند یک
فایل
کاملاً
پیوندخورده
(fully linked) را بین هر
دو قالب
دلخواه کپی
کند؛ با این
حال، کپی
کردن یک
فایل شیء
بازآدرسپذیر
(relocatable) بین هر دو
قالب ممکن
است مطابق
انتظار عمل
نکند.
objcopy برای انجام تبدیلهای خود فایلهای موقتی ایجاد کرده و پس از اتمام کار، آنها را حذف میکند. objcopy برای تمام کارهای تبدیل خود از BFD استفاده میکند؛ این ابزار به تمام قالبهای توصیفشده در BFD دسترسی دارد و از این رو میتواند اغلب قالبها را بدون نیاز به مشخص کردن صریح تشخیص دهد.
میتوان از objcopy برای تولید S-recordها با تعیین مقصد خروجی srec استفاده کرد (برای مثال، استفاده از -O srec).
همچنین میتوان از objcopy برای تولید یک فایل باینری خام با تعیین مقصد خروجی binary استفاده کرد (برای مثال، استفاده از -O binary). هنگامی که objcopy یک فایل باینری خام تولید میکند، در واقع یک نسخه تخلیه حافظه (memory dump) از محتویات فایل شیء ورودی ایجاد میکند. تمام نمادها و اطلاعات بازآدرسدهی دور ریخته میشوند. تخلیه حافظه از نشانی بارگذاری (load address) پایینترین بخشی که در فایل خروجی کپی شده است، آغاز خواهد شد.
هنگام تولید یک 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
تطابق
داشته باشد
از فایل
خروجی حذف
میکند. این
گزینه
میتواند
بیش از یک
بار مشخص
شود. توجه
داشته
باشید که
استفاده
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند.
نویسههای
عامهپسند
(wildcard) در sectionpattern
پذیرفته
میشوند.
استفاده
همزمان از
هر دو
گزینهٔ -j و
-R منجر به
رفتار
تعریفنشده
میشود.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بخشهای منطبق حذف نخواهند شد، حتی اگر استفاده قبلی از --remove-section در همان خط فرمان باعث حذف آنها میشد. برای مثال:
--remove-section=.text.* --remove-section=!.text.foo
تمام بخشهای منطبق بر الگوی '.text.*' را حذف خواهد کرد، اما بخش '.text.foo' را حذف نمیکند.
- --keep-section=sectionpattern
- هنگام حذف بخشها از فایل خروجی، بخشهایی را که با sectionpattern تطابق دارند نگه میدارد.
- --remove-relocations=sectionpattern
- بازآدرسدهیهای
غیرپویا (non-dynamic
relocations) را از
فایل خروجی
برای هر
بخشی که با
sectionpattern مطابقت
داشته باشد
حذف میکند.
این گزینه
میتواند
بیش از یک
بار مشخص
شود. توجه
داشته
باشید که
استفاده
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند، و تلاش
برای حذف یک
بخش
بازآدرسدهی
پویا مانند
.rela.plt از یک
فایل
اجرایی یا
کتابخانه
مشترک با
--remove-relocations=.plt کار
نخواهد کرد.
نویسههای
عامهپسند
در sectionpattern
پذیرفته
میشوند.
برای مثال:
--remove-relocations=.text.*
بازآدرسدهیهای تمام بخشهای منطبق بر الگوی '.text.*' را حذف خواهد کرد.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بازآدرسدهیهای بخشهای منطبق حذف نخواهند شد، حتی اگر استفاده قبلی از --remove-relocations در همان خط فرمان موجب حذف آنها میشد. برای مثال:
--remove-relocations=.text.* --remove-relocations=!.text.foo
تمام بازآدرسدهیهای بخشهای منطبق با الگوی '.text.*' را حذف خواهد کرد، اما بازآدرسدهیهای بخش '.text.foo' را حذف نخواهد کرد.
- --strip-section-headers
- سرآیندهای بخش (section headers) را حذف میکند. این گزینه مختص فایلهای ELF است. مستلزم --strip-all و --merge-notes است.
- -S
- --strip-all
- اطلاعات بازآدرسدهی و نمادها را از فایل مبدأ کپی نمیکند. همچنین بخشهای اشکالزدایی (debug) را حذف میکند.
- -g
- --strip-debug
- نمادها یا بخشهای اشکالزدایی را از فایل مبدأ کپی نمیکند.
- --strip-unneeded
- علاوه بر نمادها و بخشهای اشکالزدایی که توسط --strip-debug حذف میشوند، تمام نمادهایی را که برای پردازش بازآدرسدهی نیاز نیستند نیز حذف میکند.
- -K symbolname
- --keep-symbol=symbolname
- هنگام پاکسازی نمادها، نماد symbolname را حتی اگر در حالت عادی پاکسازی میشد، نگه میدارد. این گزینه میتواند بیش از یک بار مشخص شود..IP "-N symbolname" 4
- --strip-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-unneeded-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند مگر اینکه برای یک بازآرایی (relocation) مورد نیاز باشد. این گزینه میتواند بیش از یک بار مشخص شود.
- -G symbolname
- --keep-global-symbol=symbolname
- تنها نماد symbolname را سراسری نگه میدارد. تمامی نمادهای دیگر را برای فایل محلی میکند، به طوری که از خارج قابل مشاهده نباشند. این گزینه میتواند بیش از یک بار مشخص شود. توجه: این گزینه نمیتواند همراه با گزینههای --globalize-symbol یا --globalize-symbols استفاده شود.
- --localize-hidden
- در یک شیء ELF، تمام نمادهایی را که دید (visibility) پنهان یا داخلی دارند به عنوان محلی علامتگذاری میکند. این گزینه علاوه بر گزینههای محلیسازی مخصوص نماد مانند -L اعمال میشود.
- -L symbolname
- --localize-symbol=symbolname
- یک نماد سراسری یا ضعیف با نام symbolname را به یک نماد محلی تبدیل میکند، به طوری که از خارج قابل مشاهده نباشد. این گزینه میتواند بیش از یک بار مشخص شود. توجه - نمادهای منحصربهفرد (unique) تبدیل نمیشوند.
- -W symbolname
- --weaken-symbol=symbolname
- نماد symbolname را ضعیف (weak) میکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --globalize-symbol=symbolname
- به نماد symbolname حوزهٔ سراسری میدهد تا در خارج از فایلی که در آن تعریف شده است قابل مشاهده باشد. این گزینه میتواند بیش از یک بار مشخص شود. توجه: این گزینه نمیتواند همراه با گزینههای -G یا --keep-global-symbol استفاده شود.
- -w
- --wildcard
- استفاده از
عبارتهای
باقاعده را
در symbolnameهای
بهکاررفته
در سایر
گزینههای
خط فرمان
مجاز
میکند.
عملگرهای
علامت سؤال
(؟)، ستاره (*)،
ممیز
وارونه (\) و
قلابها ([])
میتوانند
در هر کجای
نام نماد
استفاده
شوند. اگر
نخستین
نویسهٔ نام
نماد علامت
تعجب (!)
باشد،
مفهوم
گزینه برای
آن نماد
معکوس
میشود.
برای مثال:
-w -W !foo -W fo*
باعث میشود objcopy تمام نمادهایی را که با «fo» شروع میشوند، به جز نماد «foo»، ضعیف کند.
- -x
- --discard-all
- نمادهای غیرسراسری را از فایل مبدأ کپی نمیکند.
- -X
- --discard-locals
- نمادهای محلی تولیدشده توسط کامپایلر را کپی نمیکند. (این نمادها معمولاً با L یا . آغاز میشوند.)
- -b byte
- --byte=byte
- اگر درهمبافی (interleaving) از طریق گزینهٔ --interleave فعال شده باشد، محدودهٔ بایتهایی را که باید نگه داشته شوند از بایت شمارهٔ byteام آغاز میکند. byte میتواند در محدودهٔ 0 تا breadth-1 باشد، که در آن breadth مقداری است که توسط گزینهٔ --interleave مشخص شده است.
- -i [breadth]
- --interleave[=breadth]
- از هر breadth
بایت، تنها
یک محدوده
را کپی
میکند.
(دادههای
سربرگ تحت
تأثیر قرار
نمیگیرند).
این که کپی
از کدام
بایت در این
محدوده
آغاز شود با
گزینهٔ --byte
انتخاب
میشود. عرض
محدوده نیز
با گزینهٔ
--interleave-width مشخص
میشود.
این گزینه برای ایجاد فایلها بهمنظور برنامهریزی ROM مفید است. معمولاً با یک هدف خروجی "srec" استفاده میشود. توجه داشته باشید که اگر گزینهٔ --byte را نیز مشخص نکنید، objcopy خطا خواهد گرفت.
عرض پیشفرض درهمبافی 4 است؛ بنابراین با تنظیم --byte روی 0، ابزار objcopy بایت اول از هر چهار بایت را از ورودی به خروجی کپی میکند.
- --interleave-width=width
- هنگامی که
همراه با
گزینهٔ --interleave
استفاده
شود، در هر
بار width بایت
را کپی
میکند.
نقطهٔ آغاز
محدودهٔ
بایتهایی
که باید کپی
شوند با
گزینهٔ --byte و
وسعت
محدوده با
گزینهٔ --interleave
تعیین
میشود.
مقدار پیشفرض برای این گزینه 1 است. مجموع مقدار width و مقدار byte تعیینشده توسط گزینهٔ --byte نباید از مقدار پهنای درهمبافی تعیینشده توسط گزینهٔ --interleave فراتر رود.
این گزینه میتواند برای ساخت ایمیجهایی برای دو فلش ۱۶ بیتیِ درهمبافتهشده در یک گذرگاه ۳۲ بیتی، با ارسال -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
- در حالت
قطعی عمل
نمیکند.
این برعکس
گزینهٔ -D
در بالا
است: هنگام
کپی کردن
اعضای
آرشیو و
نوشتن
نمایهٔ
آرشیو، از
مقادیر
واقعی UID، GID،
برچسب
زمانی و
حالت
فایلیِ
آنها
استفاده
میکند.
این حالت پیشفرض است مگر اینکه binutils با --enable-deterministic-archives پیکربندی شده باشد.
- --debugging
- در صورت امکان، اطلاعات اشکالزدایی را تبدیل میکند. این حالت پیشفرض نیست زیرا تنها برخی از قالبهای اشکالزدایی پشتیبانی میشوند و فرایند تبدیل ممکن است زمانبر باشد.
- --gap-fill val
- شکافهای میان بخشها را با val پر میکند. این عملیات بر روی آدرس بارگذاری (LMA) بخشها اعمال میشود. این کار با افزایش اندازهٔ بخشی که آدرس پایینتری دارد و پر کردن فضای خالی اضافهشده با val انجام میگیرد.
- --pad-to address
- فایل خروجی را تا آدرس بارگذاری address پد (پر) میکند. این کار با افزایش اندازهٔ آخرین بخش انجام میشود. فضای اضافی با مقدار مشخصشده توسط --gap-fill (پیشفرض صفر) پر میشود.
- --set-start val
- آدرس شروع (که به عنوان آدرس ورودی نیز شناخته میشود) فایل جدید را روی val تنظیم میکند. همهٔ قالبهای فایل شیء از تنظیم آدرس شروع پشتیبانی نمیکنند.
- --change-start incr
- --adjust-start incr
- آدرس شروع (که به عنوان آدرس ورودی نیز شناخته میشود) را با اضافه کردن incr تغییر میدهد. همهٔ قالبهای فایل شیء از تنظیم آدرس شروع پشتیبانی نمیکنند.
- --change-addresses incr
- نشانیهای VMA و LMA تمام بخشها و همچنین نشانی آغازین را با افزودن incr تغییر میدهد. برخی قالبهای فایل شیء اجازه تغییر دلخواه نشانی بخشها را نمیدهند. توجه داشته باشید که این گزینه بخشها را بازآرایی (relocate) نمیکند؛ اگر برنامه انتظار داشته باشد بخشها در نشانی خاصی بارگذاری شوند و این گزینه بهگونهای برای تغییر بخشها استفاده شود که در نشانی متفاوتی بارگذاری گردند، ممکن است اجرای برنامه با شکست مواجه شود.
- --change-section-address sectionpattern{=,+,-}val
- --adjust-section-vma sectionpattern{=,+,-}val
- نشانی VMA و همچنین نشانی LMA هر بخشی را که با sectionpattern مطابقت داشته باشد، تنظیم کرده یا تغییر میدهد. اگر از = استفاده شود، نشانی بخش بر روی val تنظیم میگردد. در غیر این صورت، مقدار val به نشانی بخش اضافه یا از آن کسر میشود. به توضیحات ذیل --change-addresses در بالا مراجعه کنید. اگر sectionpattern با هیچیک از بخشهای فایل ورودی مطابقت نداشته باشد، هشداری صادر خواهد شد، مگر اینکه از --no-change-warnings استفاده شود.
- --change-section-lma sectionpattern{=,+,-}val
- نشانی LMA هر بخشی را که با sectionpattern مطابقت داشته باشد، تنظیم کرده یا تغییر میدهد. نشانی LMA نشانیای است که بخش در زمان بارگذاری برنامه درون حافظه بارگذاری میشود. معمولاً این نشانی با نشانی VMA (نشانی بخش در زمان اجرای برنامه) یکسان است، اما در برخی سیستمها، بهویژه سیستمهایی که برنامه در ROM نگهداری میشود، این دو میتوانند متفاوت باشند. اگر از = استفاده شود، نشانی بخش بر روی val تنظیم میگردد. در غیر این صورت، مقدار val به نشانی بخش افزوده یا از آن کسر میشود. به توضیحات ذیل --change-addresses در بالا مراجعه کنید. اگر sectionpattern با هیچ بخشی در فایل ورودی مطابقت نداشته باشد، هشداری صادر خواهد شد، مگر آنکه از --no-change-warnings استفاده شود.
- --change-section-vma sectionpattern{=,+,-}val
- نشانی VMA هر
بخشی را که
با sectionpattern
مطابقت
داشته
باشد،
تنظیم کرده
یا تغییر
میدهد.
نشانی VMA
نشانیای
است که پس
از شروع
اجرای
برنامه،
بخش در آن
مستقر
میشود.
معمولاً
این نشانی
با نشانی LMA
(نشانی
بارگذاری
بخش درون
حافظه)
یکسان است،
اما در برخی
سیستمها،
بهویژه
سیستمهایی
که برنامه
در ROM
نگهداری
میشود،
این دو
میتوانند
با یکدیگر
تفاوت
داشته
باشند. اگر
از =
استفاده
شود، نشانی
بخش بر روی
val تنظیم
میگردد. در
غیر این
صورت،
مقدار val به
نشانی بخش
اضافه یا از
آن کسر
میشود. به
توضیحات
ذیل --change-addresses در
بالا
مراجعه
نمایید. اگر
sectionpattern با هیچ
بخشی در
فایل ورودی
مطابقت
نداشته
باشد،
هشداری
صادر خواهد
شد، مگر
اینکه از
--no-change-warnings
استفاده
شود.
نکته - تغییر دادن VMA بخشها در یک باینری کاملاً پیوندخورده (fully linked binary) میتواند خطرناک باشد، زیرا ممکن است کدهایی وجود داشته باشند که انتظار دارند بخشها در همان نشانی قدیمیشان مستقر باشند.
- --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
- همترازی
را برای هر
بخشی که با
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 است، با این تفاوت که فایل قالببندیشدهای ایجاد نمیکند، بلکه صرفاً محتویات را بدون اعمال هیچگونه بازآرایی (relocation)، بهصورت دادههای باینری خام تخلیه میکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --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) خواهد بود. تعیین یک بخش تعریفنشده منجر به یک خطای مهلک میشود. هیچ بررسی خاصی روی مقدار انجام نمیگیرد و دقیقاً همانطور که مشخص شده دریافت میشود. پرچمهای نماد قابل تعیین هستند اما همه پرچمها برای تمام قالبهای فایل شیء معنادار نخواهند بود. بهطور پیشفرض، نماد بهصورت سراسری (global) خواهد بود. پرچم ویژهٔ 'before=othersym' نماد جدید را پیش از othersym مشخصشده درج میکند، در غیر این صورت نماد(ها) به ترتیبی که ظاهر میشوند به انتهای جدول نمادها افزوده خواهند شد.
- --rename-section oldname=newname[,flags]
- نام یک بخش
را از oldname به
newname تغییر
میدهد، و
در حین
فرآیند
بهطور
اختیاری
پرچمهای
بخش را به flags
تغییر
میدهد. این
کار نسبت به
استفاده از
اسکریپت
پیونددهنده
برای تغییر
نام، این
مزیت را
دارد که
خروجی
همچنان
بهصورت یک
فایل شیء
باقی
میماند و
به یک فایل
اجرایی
پیوندخورده
تبدیل
نمیشود.
این گزینه
همان
مجموعه
پرچمهای
گزینهٔ
--set-section-flags را
میپذیرد.
این گزینه بهویژه زمانی که قالب ورودی باینری باشد بسیار مفید است، چرا که در این حالت همواره بخشی به نام .data ایجاد میشود. برای نمونه، اگر میخواهید بهجای آن بخشی با نام .rodata حاوی دادههای باینری ایجاد کنید، میتوانید از خط فرمان زیر برای رسیدن به آن استفاده نمایید:
objcopy -I binary -O <output_format> -B <architecture> \ --rename-section .data=.rodata,alloc,load,readonly,data,contents \ <input_binary_file> <output_object_file>
- --long-section-names {enable,disable,keep}
- نحوهٔ مدیریت نامهای بخش طولانی را هنگام پردازش قالبهای شیء "COFF" و "PE-COFF" کنترل میکند. رفتار پیشفرض، یعنی keep، حفظ نامهای بخش طولانی در صورت وجود در فایل ورودی است. گزینههای enable و disable استفاده از نامهای بخش طولانی در شیء خروجی را بهطور اجباری فعال یا غیرفعال میکنند؛ هنگامی که disable برقرار باشد، هرگونه نام بخش طولانی در شیء ورودی کوتاه (truncate) خواهد شد. گزینهٔ enable تنها در صورتی نامهای بخش طولانی را تولید میکند که در ورودیها وجود داشته باشند؛ این عملکرد عمدتاً مانند keep است، اما اینکه آیا گزینه enable ممکن است ایجاد یک جدول رشتهای خالی در فایل خروجی را اجباری کند یا خیر، نامشخص رها شده است.
- --change-leading-char
- برخی قالبهای فایل شیء از نویسههای خاصی در ابتدای نمادها استفاده میکنند. متداولترین چنین نویسهای زیرخط (underscore) است که کامپایلرها اغلب پیش از هر نماد اضافه میکنند. این گزینه به 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 مرتب خواهند شد..IP --srec-len=ival 4 تنها برای خروجی srec معنادار است. بیشینهٔ طول رکوردهای S (یا Srecord) تولیدشده را روی ival تنظیم میکند. این طول شامل فیلدهای آدرس، داده و crc میشود.
- --srec-forceS3
- تنها برای خروجی srec معنادار است. از تولید رکوردهای S1/S2 خودداری کرده و تنها قالب رکوردهای S3 را ایجاد میکند.
- --redefine-sym old=new
- نام نماد old را به new تغییر میدهد. این گزینه زمانی که سعی دارید دو مؤلفه که کد منبع آنها را در اختیار ندارید را به یکدیگر پیوند دهید و تداخل نام وجود دارد، میتواند مفید باشد.
- --redefine-syms=filename
- گزینهٔ --redefine-sym را بر روی هر جفتنماد «old new» فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده (flat file) با یک جفتنماد در هر سطر است. توضیح خطوط میتواند با نویسهٔ هش (#) مشخص شود. این گزینه میتواند بیش از یک بار مشخص شود.
- --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) علامتگذاری میکند. این گزینه برای همهٔ قالبهای فایل شیء معنادار نیست.
- --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
را در خروجی
حفظ میکند.
نکته - سرآیند بخشهای پیراستهشده، از جمله اندازهٔ آنها، حفظ میشوند، اما محتویات آن بخشها دور ریخته میشوند. سرآیند بخشها حفظ میشوند تا سایر ابزارها بتوانند فایل debuginfo را با فایل اجرایی واقعی تطبیق دهند، حتی اگر آن فایل اجرایی به فضای آدرس متفاوتی بازنشانی شده باشد.
هدف این است که این گزینه همراه با --add-gnu-debuglink برای ایجاد یک فایل اجرایی دوقسمتی به کار رود؛ یکی باینری پیراستهشده که فضای کمتری در RAM و در توزیع اشغال میکند و دومی فایل اطلاعات اشکالزدایی که تنها در صورت نیاز به قابلیتهای اشکالزدایی لازم است. روال پیشنهادی برای ایجاد این فایلها به شرح زیر است:
- 1.<فایل اجرایی را بهطور معمول پیوند دهید. با فرض اینکه نام آن>
- "foo" باشد، سپس...
- 1.<اجرای "objcopy --only-keep-debug foo foo.dbg" برای>
- ایجاد فایلی شامل اطلاعات اشکالزدایی.
- 1.<اجرای "objcopy --strip-debug foo" برای ایجاد یک>
- فایل اجرایی پیراستهشده.
- 1.<اجرای "objcopy --add-gnu-debuglink=foo.dbg foo">
- برای افزودن پیوندی به اطلاعات اشکالزدایی در فایل اجرایی پیراستهشده.
نکته---انتخاب ".dbg" بهعنوان پسوند فایل اطلاعات اشکالزدایی اختیاری است. همچنین مرحلهٔ "--only-keep-debug" اختیاری است. میتوانید در عوض این کار را انجام دهید:
- 1.<فایل اجرایی را بهطور معمول پیوند دهید.>
- 1.<رونوشت از "foo" به "foo.full">
- 1.<اجرای "objcopy --strip-debug foo">
- 1.<اجرای "objcopy --add-gnu-debuglink=foo.full foo">
یعنی فایلی که توسط --add-gnu-debuglink به آن اشاره میشود میتواند فایل اجرایی کامل باشد. نیازی نیست حتماً فایلی باشد که توسط سوییچ --only-keep-debug ایجاد شده است.
نکته---این سوییچ تنها برای استفاده روی فایلهای کاملاً پیوندیافته در نظر گرفته شده است. استفاده از آن روی فایلهای شیء که ممکن است اطلاعات اشکالزدایی در آنها ناقص باشد معقول نیست. گذشته از این، قابلیت gnu_debuglink در حال حاضر تنها از وجود یک نام فایل حاوی اطلاعات اشکالزدایی پشتیبانی میکند، نه چندین نام فایل برمبنای یک فایل بهازای هر شیء. حذف محتوای تمام بخشهای DWARF .dwo، در حالی که باقی بخشهای دیباگ و تمام نمادها دستنخورده باقی میمانند. این گزینه برای استفاده توسط کامپایلر به عنوان بخشی از گزینه -gsplit-dwarf در نظر گرفته شده است، که اطلاعات دیباگ را بین فایل .o و یک فایل مجزای .dwo تقسیم میکند. کامپایلر ابتدا تمام اطلاعات دیباگ را در همان فایل تولید کرده، سپس از گزینه --extract-dwo برای کپی کردن بخشهای .dwo به فایل .dwo بهره میبرد، و سپس با گزینه --strip-dwo آن بخشها را از فایل اصلی .o حذف میکند.
- --extract-dwo
- استخراج محتوای تمام بخشهای DWARF .dwo. برای اطلاعات بیشتر گزینه --strip-dwo را ببینید.
- --file-alignment num
- مشخص کردن تراز فایل (file alignment). بخشها در فایل همواره در آفستهایی از فایل آغاز میشوند که مضربی از این عدد باشند. پیشفرض این مقدار 512 است. [این گزینه مخصوص مقصدهای PE است.]
- --heap reserve
- --heap reserve,commit
- مشخص کردن میزان حافظه بر حسب بایت برای رزرو (و در صورت تمایل commit) جهت استفاده به عنوان هیپ (heap) برای این برنامه. [این گزینه مخصوص مقصدهای PE است.]
- --image-base value
- استفاده از value به عنوان نشانی پایه برنامه یا dll شما. این پایینترین مکان حافظه است که هنگام بارگذاری برنامه یا dll شما استفاده خواهد شد. برای کاهش نیاز به بازنشانی (relocate) و بهبود عملکرد dllهای شما، هر کدام باید یک نشانی پایه یکتا داشته باشند و با هیچ dll دیگری همپوشانی نداشته باشند. مقدار پیشفرض برای فایلهای اجرایی 0x400000 و برای dllها 0x10000000 است. [این گزینه مخصوص مقصدهای PE است.]
- --section-alignment num
- [این گزینه
مخصوص
مقصدهای PE
است.]
تنظیم فیلد تراز بخش در هدر PE - در صورتی که در باینری موجود باشد. بخشها در حافظه همواره در نشانیهایی آغاز میشوند که مضربی از این عدد باشند. مقدار پیشفرض 0x1000 است.
نکته - اگر نشانیهای LMA یا VMA یک بخش دیگر تراز نباشند، و آن نشانیها از طریق گزینههای --set-section-lma یا --set-section-vma تنظیم نشده باشند، و فایل به طور کامل بازنشانی (relocate) شده باشد، یک پیام هشدار صادر خواهد شد. آنگاه تصمیمگیری درباره این که آیا 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
- پرچمهای بخشها (section flags) و نمادهای فایل را نگه میدارد اما تمام دادههای بخشها را حذف میکند. به طور مشخص، این گزینه:
- *<محتوای تمام بخشها را حذف میکند؛>
- *<اندازه هر بخش را برابر صفر قرار میدهد؛ و>
- *<نشانی شروع فایل را برابر صفر تنظیم میکند.>
این گزینه برای ساخت فایل .sym برای یک هسته VxWorks استفاده میشود. همچنین میتواند روش مفیدی برای کاهش اندازه فایل ورودی لینکر در گزینه --just-symbols باشد.
- --compress-debug-sections
- فشردهسازی بخشهای دیباگ DWARF با استفاده از zlib همراه با SHF_COMPRESSED از ELF ABI. نکته - اگر فشردهسازی در واقع باعث بزرگتر شدن یک بخش شود، فشردهسازی روی آن انجام نمیشود.
- --compress-debug-sections=none
- --compress-debug-sections=zlib
- --compress-debug-sections=zlib-gnu
- --compress-debug-sections=zlib-gabi
- --compress-debug-sections=zstd
- برای فایلهای ELF، این گزینهها نحوه فشردهسازی بخشهای دیباگ DWARF را کنترل میکنند. گزینه --compress-debug-sections=none معادل --decompress-debug-sections است. گزینههای --compress-debug-sections=zlib و --compress-debug-sections=zlib-gabi معادل --compress-debug-sections هستند. گزینه --compress-debug-sections=zlib-gnu بخشهای دیباگ DWARF را با استفاده از قالب منسوخشده zlib-gnu فشرده میکند. بخشهای دیباگ تغییر نام مییابند تا با .zdebug آغاز شوند. گزینه --compress-debug-sections=zstd بخشهای دیباگ DWARF را با استفاده از zstd فشرده میسازد. نکته - اگر فشردهسازی در واقع باعث بزرگتر شدن یک بخش شود، فشرده نخواهد شد و تغییر نام نیز نخواهد یافت.
- --decompress-debug-sections
- خارج کردن بخشهای دیباگ DWARF از حالت فشرده. برای یک بخش .zdebug، نام اصلی آن بازگردانده میشود.
- --elf-stt-common=yes
- --elf-stt-common=no
- برای فایلهای ELF، این گزینهها کنترل میکنند که آیا نمادهای عمومی (common symbols) باید به نوع "STT_COMMON" تبدیل شوند یا نوع "STT_OBJECT". گزینه --elf-stt-common=yes نوع نماد عمومی را به "STT_COMMON" تبدیل میکند. گزینه --elf-stt-common=no نوع نماد عمومی را به "STT_OBJECT" تبدیل مینماید.
- --merge-notes
- --no-merge-notes
- برای فایلهای ELF، تلاش (یا عدم تلاش) برای کاهش اندازه هر یک از بخشهای نوع SHT_NOTE از طریق حذف یادداشتهای تکراری.
- -V
- --version
- نمایش شماره نسخه objcopy.
- --verilog-data-width=bytes
- برای خروجی Verilog، این گزینه تعداد بایتهای تبدیلشده برای هر عنصر داده خروجی را کنترل میکند. مقصد ورودی، ترتیب بایتها (endianness) در تبدیل را کنترل میکند.
- -v
- --verbose
- خروجی پرگو: فهرست کردن تمام فایلهای شیء (object files) تغییریافته. در مورد بایگانیها، دستور objcopy -V تمام اعضای بایگانی را فهرست میکند.
- --help
- نمایش خلاصهای از گزینههای objcopy.
- --info
- نمایش فهرستی از تمام معماریها و قالبهای شیء در دسترس.
- @file
- خواندن
گزینههای
خط فرمان از
file.
گزینههای
خواندهشده
به جای
گزینه اصلی
@file قرار
میگیرند.
اگر file وجود
نداشته
باشد یا
نتوان آن را
خواند، با
گزینه به
صورت عینی
برخورد
میشود و
حذف نخواهد
شد.
گزینهها در file با فاصله خالی (whitespace) از یکدیگر جدا میشوند. یک نویسه فاصله خالی را میتوان با محصور کردن کل گزینه در گیومه تکی یا دوتایی، درون گزینه گنجاند. هر نویسهای (از جمله بکاسلش) را میتوان با درج یک بکاسلش پیش از آن اضافه کرد. خود file نیز میتواند شامل گزینههای @file بیشتری باشد؛ چنین گزینههایی به صورت بازگشتی پردازش خواهند شد..SH "همچنین ببینید (SEE ALSO)" ld(1)، objdump(1) و مدخلهای Info برای binutils.
کپیرایت و تکثیر (COPYRIGHT)
Copyright (c) 1991-2025 Free Software Foundation, Inc.
اجازه نسخهبرداری، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخه 1.3 یا هر نسخه جدیدتر منتشر شده توسط بنیاد نرمافزار آزاد (Free Software Foundation) اعطا میشود؛ بدون بخشهای تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. نسخهای از این مجوز در بخشی تحت عنوان «GNU Free Documentation License» گنجانده شده است.
| 2026-01-23 | binutils-2.45.1 |