| 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 میتواند با استفاده از هدف خروجی srec برای تولید S-recordها به کار رود (به عنوان مثال، استفاده از -O srec).
objcopy میتواند با تعیین هدف خروجی به صورت binary برای تولید یک فایل باینری خام به کار رود (برای نمونه، استفاده از -O binary). هنگامی که objcopy یک فایل باینری خام تولید میکند، در عمل یک رونوشت حافظه (memory dump) از محتویات فایل هدف ورودی ایجاد خواهد کرد. تمامی نمادها (symbols) و اطلاعات بازآدرسدهی (relocation) دور ریخته خواهند شد. رونوشت حافظه از آدرس بارگذاری پایینترین بخشی که در فایل خروجی کپی شده است، آغاز میشود.
هنگام تولید یک 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
منطبق باشد
از فایل
خروجی حذف
میکند. این
گزینه
میتواند
بیش از یک
بار مشخص
شود. توجه
داشته
باشید که
استفادهٔ
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند.
نویسههای
عامهپسند
(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 کار
نخواهد کرد.
نویسههای
عامهپسند
(wildcard) در 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) را حذف میکند..IP -g 4
- --strip-debug
- نمادها یا بخشهای اشکالزدایی را از فایل مبدأ کپی نکن.
- --strip-unneeded
- علاوه بر نمادها و بخشهای اشکالزدایی حذفشده توسط --strip-debug، تمام نمادهایی را که برای پردازش بازنشانی (relocation) مورد نیاز نیستند حذف کن.
- -K symbolname
- --keep-symbol=symbolname
- هنگام حذف نمادها، نماد symbolname را نگهدار، حتی اگر در حالت عادی حذف میشد. این گزینه میتواند بیش از یک بار مشخص شود.
- -N symbolname
- --strip-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نکن. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-unneeded-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نکن، مگر اینکه برای یک بازنشانی مورد نیاز باشد. این گزینه میتواند بیش از یک بار مشخص شود.
- -G symbolname
- --keep-global-symbol=symbolname
- تنها نماد symbolname را سراسری نگه دار. همهٔ نمادهای دیگر را برای فایل محلی کن، بهطوری که از بیرون قابل مشاهده نباشند. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه را نمیتوان همراه با گزینههای --globalize-symbol یا --globalize-symbols استفاده کرد.
- --localize-hidden
- در یک شیء ELF، تمام نمادهایی را که دیدهپذیری مخفی (hidden) یا درونی (internal) دارند به عنوان محلی نشانهگذاری کن. این گزینه علاوه بر گزینههای محلیسازی مختص هر نماد مانند -L اعمال میشود.
- -L symbolname
- --localize-symbol=symbolname
- یک نماد سراسری یا ضعیف (weak) به نام symbolname را به یک نماد محلی تبدیل کن، بهطوری که از بیرون قابل مشاهده نباشد. این گزینه میتواند بیش از یک بار مشخص شود. نکته - نمادهای یکتا (unique) تبدیل نمیشوند.
- -W symbolname
- --weaken-symbol=symbolname
- نماد symbolname را ضعیف کن. این گزینه میتواند بیش از یک بار مشخص شود.
- --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
- اگر درهمبافی از طریق گزینهٔ --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، برای ایجاد ایمیجها جهت دو حافظهٔ فلش 16 بیتی که در یک گذرگاه 32 بیتی درهمبافته شدهاند استفاده شود. اگر ورودی '12345678' باشد، خروجیها به ترتیب '1256' و '3478' خواهند بود.
- -p
- --preserve-dates
- تاریخهای
دسترسی و
تغییر فایل
خروجی را
مشابه
تاریخهای
فایل ورودی
قرار بده.
این گزینه همچنین تاریخ ذخیرهشده در سرآیند فایلی با قالب PE را کپی میکند، مگر اینکه متغیر محیطی SOURCE_DATE_EPOCH تعریف شده باشد. اگر تعریف شده باشد، این متغیر به عنوان تاریخ ذخیرهشده در سرآیند استفاده میشود، که به صورت تعداد ثانیههای گذشته از مبدأ زمان یونیکس (Unix epoch) تفسیر میگردد.
- -D
- --enable-deterministic-archives
- در حالت deterministic
(قطعی) عمل
کن. هنگام
کپی کردن
اعضای
آرشیو و
نوشتن
نمایهٔ
آرشیو،
برای UIDها،
GIDها و
برچسبهای
زمانی از
صفر
استفاده کن
و حالتهای
فایل (file modes)
یکسانی را
برای تمام
فایلها به
کار ببر.
اگر binutils با --enable-deterministic-archives پیکربندی شده باشد، این حالت به صورت پیشفرض فعال است. این حالت را میتوان با گزینهٔ -U در زیر غیرفعال کرد.
- -U
- --disable-deterministic-archives
- در حالت deterministic
عمل نکنید.
این معکوس
گزینهٔ -D
در بالاست:
هنگام
رونوشتبرداری
از اعضای
آرشیو و
نوشتن
نمایهٔ
آرشیو، از
مقادیر
واقعی UID، GID،
مهر زمانی و
حالت فایل
آنها
استفاده
کنید.
این حالت پیشفرض است، مگر اینکه binutils با --enable-deterministic-archives پیکربندی شده باشد.
- --debugging
- تبدیل اطلاعات اشکالزدایی، در صورت امکان. این حالت پیشفرض نیست زیرا تنها قالبهای اشکالزدایی خاصی پشتیبانی میشوند و فرایند تبدیل میتواند زمانبر باشد.
- --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 به آنها. برخی قالبهای فایل شیء اجازه نمیدهند نشانی بخشها به صورت دلخواه تغییر کند. توجه داشته باشید که این کار بخشها را بازنشانی (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
- تنظیم
ترازبندی
برای هر
بخشی که با
sectionpattern مطابقت
دارد. align
ترازبندی
را بر حسب
بایت مشخص
میکند و
باید توانی
از دو باشد؛
یعنی ۱، ۲،
۴، ۸ و الی
آخر.
نکته - تنظیم ترازبندی یک بخش به طور خودکار نشانیهای LMA یا VMA آن را تراز نمیکند. اگر لازم باشد آنها نیز تغییر کنند، باید از گزینههای --change-section-lma و/یا --change-section-vma استفاده شود. همچنین توجه داشته باشید که تغییر VMAها میتواند در باینریهای کاملاً پیوندخورده باعث ایجاد مشکل شود؛ جایی که ممکن است کدی وجود داشته باشد که انتظار دارد محتوای بخشها در نشانی قدیمی آنها مستقر باشد.
- --add-section sectionname=filename
- افزودن یک بخش جدید با نام sectionname هنگام رونوشت فایل. محتوای بخش جدید از فایل filename گرفته میشود. اندازهٔ بخش برابر با اندازهٔ فایل خواهد بود. این گزینه تنها روی قالبهای فایلی کار میکند که میتوانند از بخشهایی با نامهای دلخواه پشتیبانی کنند. نکته - ممکن است برای تنظیم ویژگیهای بخش تازهایجادشده، استفاده از گزینهٔ --set-section-flags لازم باشد.
- --dump-section sectionname=filename
- قرار دادن محتوای بخش با نام sectionname درون فایل filename، با بازنویسی هر محتوایی که ممکن است پیشتر در آن وجود داشته باشد. این گزینه معکوس --add-section است. این گزینه مشابه گزینهٔ --only-section است، با این تفاوت که فایل قالببندیشدهای ایجاد نمیکند، بلکه صرفاً محتوا را به صورت دادههای باینری خام، بدون اعمال هیچگونه بازنشانی، تخلیه میکند. این گزینه را میتوان بیش از یک بار مشخص کرد.
- --update-section sectionname=filename
- جایگزین
کردن
محتوای
موجود یک
بخش به نام
sectionname با
محتوای
فایل filename.
اندازهٔ
بخش با
اندازهٔ
فایل منطبق
خواهد شد.
پرچمهای
بخش برای
sectionname بدون
تغییر باقی
خواهند
ماند. برای
فایلهای
با قالب ELF،
نگاشت بخش
به قطعه (segment)
نیز بدون
تغییر باقی
میماند؛
چیزی که با
استفاده از
--remove-section و سپس
--add-section
امکانپذیر
نیست. این
گزینه را
میتوان
بیش از یک
بار مشخص
کرد.
نکته - امکان استفاده همزمان از --rename-section و --update-section در یک خط فرمان وجود دارد تا یک بخش هم بهروزرسانی و هم تغییر نام داده شود. در این حالت، نام اصلی بخش را به --update-section و نامهای اصلی و جدید بخش را به --rename-section بدهید.
- --add-symbol name=[section:]value[,flags]
- افزودن یک
نماد جدید
به نام name
هنگام
رونوشت
فایل. این
گزینه ممکن
است چندین
بار مشخص
شود. اگر section
مشخص شود،
نماد با آن
بخش مرتبط و
نسبت به آن
نسبی خواهد
بود، در غیر
این صورت یک
نماد ABS
خواهد بود.
مشخص کردن
بخشی
تعریفنشده
منجر به یک
خطای مهلک
خواهد شد.
هیچ بررسی
روی مقدار
انجام
نمیشود و
همانطور
که مشخص شده
دریافت
خواهد شد.
میتوان
پرچمهای
نماد را
مشخص کرد،
اما همهٔ
پرچمها
برای تمام
قالبهای
فایل شیء
معنادار
نخواهند
بود. بهطور
پیشفرض،
نماد
سراسری (global)
خواهد بود.
پرچم ویژهٔ
'before=othersym' نماد
جدید را در
جلوی othersym
مشخصشده
درج
میکند، در
غیر این
صورت
نماد(ها) به
همان
ترتیبی که
ظاهر
میشوند در
انتهای
جدول
نمادها
افزوده
خواهند شد..IP
"--rename-section
oldname=newname[,flags]" 4
تغییر نام
یک بخش از oldname
به newname، و به
صورت
اختیاری،
تغییر
پرچمهای
بخش به flags در
طول این
فرایند. این
روش نسبت به
استفاده از
یک اسکریپت
پیونددهنده
(linker script) برای
تغییر نام،
این مزیت را
دارد که
خروجی
همچنان به
عنوان یک
فایل شیء (object file)
باقی
میماند و
به یک فایل
اجرایی
پیوند
خورده
تبدیل
نمیشود.
این گزینه
همان
مجموعهای
از پرچمها
را
میپذیرد
که گزینهٔ
--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 اعمال شود، هر نام بخش طولانی در شیء ورودی کوتاهسازی (truncate) خواهد شد. گزینهٔ enable تنها در صورتی نامهای بخش طولانی را منتشر میکند که در ورودیها وجود داشته باشند؛ این رفتار عمدتاً مشابه keep است، اما اینکه آیا گزینهٔ enable ممکن است ایجاد یک جدول رشتهٔ خالی را در فایل خروجی تحمیل کند یا خیر، تعریفنشده باقی مانده است.
- --change-leading-char
- برخی از قالبهای فایل شیء از نویسههای ویژهای در آغاز نمادها استفاده میکنند. متداولترین این نویسهها زیرخط (_) است که کامپایلرها اغلب پیش از هر نمادی اضافه میکنند. این گزینه به objcopy میگوید که هنگام تبدیل میان قالبهای فایل شیء، نویسهٔ ابتدایی هر نماد را تغییر دهد. اگر قالبهای فایل شیء از نویسهٔ ابتدایی یکسانی استفاده کنند، این گزینه هیچ اثری ندارد. در غیر این صورت، بر حسب نیاز نویسهای را اضافه، حذف یا تغییر خواهد داد.
- --remove-leading-char
- اگر نخستین نویسهٔ یک نماد سراسری (global)، یک نویسهٔ ابتدایی نماد ویژه باشد که قالب فایل شیء از آن استفاده میکند، آن نویسه را حذف میکند. متداولترین نویسهٔ ابتدایی نمادها زیرخط است. این گزینه زیرخط ابتدایی را از تمام نمادهای سراسری حذف میکند. این امر در صورتی که بخواهید شیءهایی از قالبهای فایلی مختلف با قراردادهای متفاوت نامگذاری نمادها را به یکدیگر پیوند دهید، میتواند مفید باشد. این گزینه با --change-leading-char تفاوت دارد زیرا بدون توجه به قالب فایل شیءِ فایل خروجی، در صورت لزوم همیشه نام نماد را تغییر میدهد.
- --reverse-bytes=num
- ترتیب
بایتها را
در بخشی با
محتویات
خروجی
معکوس
میکند. طول
بخش باید بر
مقدار
دادهشده
بخشپذیر
باشد تا
امکان
انجام
جابهجایی
وجود داشته
باشد.
معکوسسازی
پیش از
انجام
درهمبافی
(interleaving) انجام
میشود.
این گزینه معمولاً در تولید ایمیجهای ROM برای سیستمهای مقصدِ مشکلدار استفاده میشود. برای مثال، در برخی از بردهای مقصد، کلمات ۳۲ بیتی واکشیشده از ROMهای ۸ بیتی بدون توجه به ترتیب بایت CPU، با ترتیب بایت اندیان کوچک (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 صرفاً یک فایل متنی ساده (flat file) است که در هر خط آن یک جفتنماد قرار دارد. توضیحات خطی میتوانند با نویسهٔ هش (#) مشخص شوند. این گزینه را میتوان بیش از یک بار مشخص کرد.
- --weaken
- همهٔ نمادهای سراسری (global) در فایل را به نمادهای ضعیف (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 را
به عنوان
پیشوند به
نام تمام
بخشهای
تخصیصیافته
(allocated sections) در فایل
خروجی
اضافه
میکند..IP
--add-gnu-debuglink=path-to-file 4 یک
بخش .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
را در خروجی
حفظ میکند.
نکته - سرآیندهای بخشهای پیراسته شده همراه با اندازهشان حفظ میشوند، اما محتویات بخش دور ریخته میشود. سرآیندهای بخش حفظ میشوند تا سایر ابزارها بتوانند فایل debuginfo را با فایل اجرایی واقعی مطابقت دهند، حتی اگر آن فایل اجرایی به فضای آدرس متفاوتی بازنشانی (relocate) شده باشد.
هدف این است که این گزینه در کنار --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 باشد.
نکته---این سوییچ تنها برای استفاده روی فایلهای کاملاً پیوندخورده (fully linked) در نظر گرفته شده است. استفاده از آن روی فایلهای شیء (object files) که در آنها ممکن است اطلاعات اشکالزدایی ناقص باشد، منطقی نیست. علاوه بر این، ویژگی gnu_debuglink در حال حاضر تنها از وجود یک نام فایل حاوی اطلاعات اشکالزدایی پشتیبانی میکند، نه چندین نام فایل بر پایهٔ یک فایل به ازای هر فایل شیء.
- --strip-dwo
- محتویات تمام بخشهای DWARF .dwo را حذف کرده، و بقیهٔ بخشهای اشکالزدایی و تمامی نمادها را دستنخورده باقی میگذارد. این گزینه برای استفاده توسط کامپایلر به عنوان بخشی از گزینهٔ -gsplit-dwarf در نظر گرفته شده است، که اطلاعات اشکالزدایی را بین فایل .o و یک فایل مجزای .dwo تقسیم میکند. کامپایلر تمام اطلاعات اشکالزدایی را در همان فایل تولید میکند، سپس از گزینهٔ --extract-dwo برای رونوشت بخشهای .dwo به فایل .dwo بهره میبرد، و در نهایت از گزینهٔ --strip-dwo برای حذف آن بخشها از فایل .o اصلی استفاده میکند.
- --extract-dwo
- محتویات تمام بخشهای DWARF .dwo را استخراج میکند. برای اطلاعات بیشتر گزینهٔ --strip-dwo را ببینید.
- --file-alignment num
- همترازی فایل (file alignment) را مشخص میکند. بخشها در فایل همواره در آفستهایی آغاز خواهند شد که مضربی از این عدد هستند. مقدار پیشفرض آن 512 است. [این گزینه مختص به هدفهای PE است.]
- --heap reserve
- --heap reserve,commit
- میزان حافظه بر حسب بایت را برای رزرو (و در صورت تمایل، تخصیص قطعی/commit) جهت استفاده به عنوان هیپ (heap) این برنامه مشخص میکند. [این گزینه مختص به هدفهای PE است.]
- --image-base value
- از value به عنوان آدرس پایهٔ برنامه یا dll شما استفاده میکند. این پایینترین مکان حافظه است که هنگام بارگذاری برنامه یا dll استفاده خواهد شد. برای کاهش نیاز به بازنشانی (relocate) و بهبود کارایی dllهای شما، هر یک باید آدرس پایهٔ یکتایی داشته باشند و با هیچ dll دیگری همپوشانی نداشته باشند. مقدار پیشفرض 0x400000 برای فایلهای اجرایی و 0x10000000 برای dllها است. [این گزینه مختص به هدفهای PE است.]
- --section-alignment num
- [این گزینه
مختص به
هدفهای PE
است.]
فیلد همترازی بخش را در سرآیند PE (در صورت وجود در فایل باینری) تنظیم میکند. بخشها در حافظه همیشه در آدرسهایی آغاز خواهند شد که مضربی از این عدد هستند. مقدار پیشفرض 0x1000 است.
نکته - اگر آدرسهای LMA یا VMA یک بخش دیگر همتراز نباشند، و این آدرسها از طریق گزینههای --set-section-lma یا --set-section-vma تنظیم نشده باشند، و فایل به طور کامل بازنشانی شده باشد، یک پیام هشدار صادر خواهد شد. سپس تصمیمگیری در مورد اینکه آیا LMA و VMA نیاز به بهروزرسانی دارند یا خیر، بر عهدهٔ کاربر خواهد بود.
- --stack reserve
- --stack reserve,commit
- میزان حافظه بر حسب بایت را برای رزرو (و در صورت تمایل، تخصیص قطعی/commit) جهت استفاده به عنوان پشته (stack) این برنامه مشخص میکند. [این گزینه مختص به هدفهای PE است.].IP "--subsystem which" 4
- --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) باید به نوع "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) تغییریافته را ارائه میدهد. در مورد بایگانیها، objcopy -V تمام اعضای بایگانی را فهرست میکند.
- --help
- خلاصهای از گزینههای objcopy را نمایش میدهد.
- --info
- فهرستی شامل تمام معماریها و قالبهای شیءِ موجود را نمایش میدهد.
- @file
- گزینههای
خط فرمان را
از file
میخواند.
گزینههای
خواندهشده
بهجای
گزینهٔ
اصلی @file درج
میشوند.
اگر file وجود
نداشته
باشد یا
قابل
خواندن
نباشد، با
گزینه
بهصورت
لفظی رفتار
شده و حذف
نخواهد شد.
گزینهها در file با نویسههای فاصله خالی (whitespace) از هم جدا میشوند. یک نویسهٔ فاصله خالی میتواند با قرار دادن کل گزینه در علامت نقلقول تکی یا جفتی در آن گنجانده شود. هر نویسهای (از جمله بکاسلش) میتواند با پیشوند کردن نویسهٔ مورد نظر با یک بکاسلش گنجانده شود. خود file ممکن است حاوی گزینههای @file بیشتری باشد؛ هرکدام از این گزینهها بهصورت بازگشتی پردازش خواهند شد..SH "همچنین ببینید (SEE ALSO)" ld(1)، objdump(1)، و مدخلهای Info برای binutils.
کپیرایت و تکثیر (COPYRIGHT)
کپیرایت (c) 1991-2025 Free Software Foundation, Inc.
مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخه 1.3 یا هر نسخهٔ بعدی منتشرشده توسط Free Software Foundation؛ بدون بخشهای ناوردا (Invariant Sections)، بدون متون روی جلد (Front-Cover Texts)، و بدون متون پشت جلد (Back-Cover Texts) صادر شده است. یک نسخه از این مجوز در بخش مربوطه تحت عنوان “GNU Free Documentation License” گنجانده شده است.
| 2026-01-23 | binutils-2.45.1 |