| OBJCOPY(1) | GNU Development Tools | OBJCOPY(1) |
نام (NAME)
objcopy - رونویسی و تبدیل فایلهای شیء
خلاصه دستور (SYNOPSIS)
objcopy [-F bfdname|--target=bfdname]
[-I bfdname|--input-target=bfdname]
[-O bfdname|--output-target=bfdname]
[-B bfdarch|--binary-architecture=bfdarch]
[-S|--strip-all]
[-g|--strip-debug]
[--strip-unneeded]
[-K symbolname|--keep-symbol=symbolname]
[--keep-file-symbols]
[--keep-section-symbols]
[-N symbolname|--strip-symbol=symbolname]
[--strip-unneeded-symbol=symbolname]
[-G symbolname|--keep-global-symbol=symbolname]
[--localize-hidden]
[-L symbolname|--localize-symbol=symbolname]
[--globalize-symbol=symbolname]
[--globalize-symbols=filename]
[-W symbolname|--weaken-symbol=symbolname]
[-w|--wildcard]
[-x|--discard-all]
[-X|--discard-locals]
[-b byte|--byte=byte]
[-i [breadth]|--interleave[=breadth]]
[--interleave-width=width]
[-j sectionpattern|--only-section=sectionpattern]
[-R
sectionpattern|--remove-section=sectionpattern]
[--keep-section=sectionpattern]
[--remove-relocations=sectionpattern]
[--strip-section-headers]
[-p|--preserve-dates]
[-D|--enable-deterministic-archives]
[-U|--disable-deterministic-archives]
[--debugging]
[--gap-fill=val]
[--pad-to=address]
[--set-start=val]
[--adjust-start=incr]
[--change-addresses=incr]
[--change-section-address sectionpattern{=,+,-}val]
[--change-section-lma sectionpattern{=,+,-}val]
[--change-section-vma sectionpattern{=,+,-}val]
[--change-warnings] [--no-change-warnings]
[--set-section-flags sectionpattern=flags]
[--set-section-alignment sectionpattern=align]
[--add-section sectionname=filename]
[--dump-section sectionname=filename]
[--update-section sectionname=filename]
[--rename-section oldname=newname[,flags]]
[--long-section-names {enable,disable,keep}]
[--change-leading-char] [--remove-leading-char]
[--reverse-bytes=num]
[--srec-len=ival] [--srec-forceS3]
[--redefine-sym old=new]
[--redefine-syms=filename]
[--weaken]
[--keep-symbols=filename]
[--strip-symbols=filename]
[--strip-unneeded-symbols=filename]
[--keep-global-symbols=filename]
[--localize-symbols=filename]
[--weaken-symbols=filename]
[--binary-symbol-prefixstring]
[--add-symbol
name=[section:]value[,flags]]
[--alt-machine-code=index]
[--prefix-symbols=string]
[--prefix-sections=string]
[--prefix-alloc-sections=string]
[--add-gnu-debuglink=path-to-file]
[--only-keep-debug]
[--strip-dwo]
[--extract-dwo]
[--extract-symbol]
[--writable-text]
[--readonly-text]
[--pure]
[--impure]
[--file-alignment=num]
[--heap=reserve[,commit]]
[--image-base=address]
[--section-alignment=num]
[--stack=reserve[,commit]]
[--subsystem=which:major.minor]
[--compress-debug-sections]
[--decompress-debug-sections]
[--elf-stt-common=val]
[--merge-notes]
[--no-merge-notes]
[--verilog-data-width=val]
[-v|--verbose]
[-V|--version]
[--help] [--info]
infile [outfile].SH
"توضیحات
(DESCRIPTION)" ابزار objcopy
از گنو،
محتویات یک
فایل شیء (object file)
را در فایلی
دیگر کپی
میکند. objcopy
برای
خواندن و
نوشتن
فایلهای
شیء از
کتابخانهٔ GNU
BFD استفاده
میکند. این
ابزار
میتواند
فایل شیء
مقصد را در
قالبی
متفاوت از
فایل شیء
مبدأ
بنویسد.
رفتار دقیق
objcopy توسط
گزینههای
خط فرمان
کنترل
میشود.
توجه داشته
باشید که objcopy
باید
بتواند یک
فایل
کاملاً
پیوندخورده
را بین هر دو
قالبی کپی
کند؛ با این
حال، کپی
کردن یک
فایل شیء
بازجاگذاریپذیر
(relocatable) بین هر دو
قالب ممکن
است مطابق
با انتظار
کار نکند.
objcopy برای انجام تبدیلهای خود فایلهای موقتی ایجاد کرده و پس از اتمام کار آنها را حذف میکند. objcopy برای تمام کارهای تبدیل خود از BFD بهره میبرد؛ این ابزار به تمام قالبهای توصیفشده در BFD دسترسی دارد و بنابراین میتواند بیشتر قالبها را بدون نیاز به ذکر صریح تشخیص دهد.
میتوان از objcopy برای تولید S-record با تعیین هدف خروجی srec استفاده کرد (برای نمونه، استفاده از -O srec).
میتوان از objcopy برای تولید یک فایل باینری خام با تعیین هدف خروجی binary استفاده کرد (برای نمونه، استفاده از -O binary). هنگامی که objcopy یک فایل باینری خام تولید میکند، در اصل یک تخلیهٔ حافظه (memory dump) از محتویات فایل شیء ورودی ایجاد خواهد کرد. تمام نمادها و اطلاعات بازجاگذاری دور ریخته میشوند. تخلیهٔ حافظه از نشانی بارگذاری پایینترین بخشی که در فایل خروجی کپی شده است، آغاز خواهد شد.
هنگام تولید یک S-record یا یک فایل باینری خام، استفاده از -S برای حذف بخشهای حاوی اطلاعات اشکالزدایی میتواند مفید باشد. در برخی موارد نیز استفاده از -R برای حذف بخشهایی که شامل اطلاعات غیرضروری برای فایل باینری هستند، سودمند خواهد بود.
نکته---objcopy قادر به تغییر ترتیب بایتها (endianness) در فایلهای ورودی نیست. اگر قالب ورودی دارای ترتیب بایت باشد (برخی قالبها فاقد آن هستند)، objcopy تنها میتواند ورودیها را به قالبهایی کپی کند که ترتیب بایت یکسانی دارند یا اساساً فاقد ترتیب بایت هستند (مانند srec). (با این حال، گزینهٔ --reverse-bytes را ببینید.)
گزینهها (OPTIONS)
- infile
- outfile
- به ترتیب فایلهای ورودی و خروجی. اگر outfile را مشخص نکنید، objcopy یک فایل موقت ایجاد کرده و در نهایت نتیجه را با بازنویسی مخرب بر روی نام infile جایگزین میکند.
- -I bfdname
- --input-target=bfdname
- قالب شیء فایل مبدأ را به جای تلاش برای استنتاج خودکار آن، bfdname در نظر میگیرد.
- -O bfdname
- --output-target=bfdname
- فایل خروجی را با استفاده از قالب شیء bfdname مینویسد.
- -F bfdname
- --target=bfdname
- از bfdname به عنوان قالب شیء برای هر دو فایل ورودی و خروجی استفاده میکند؛ یعنی دادهها را صرفاً بدون هیچ تبدیلی از مبدأ به مقصد منتقل میکند.
- -B bfdarch
- --binary-architecture=bfdarch
- هنگام تبدیل یک فایل ورودی بدون معماری به یک فایل شیء سودمند است. در این حالت میتوان معماری خروجی را روی bfdarch تنظیم کرد. اگر فایل ورودی دارای یک bfdarch شناختهشده باشد، این گزینه نادیده گرفته خواهد شد. میتوانید درون یک برنامه با ارجاع به نمادهای ویژهای که در فرآیند تبدیل ساخته میشوند، به این دادههای باینری دسترسی پیدا کنید. این نمادها _binary_objfile_start، _binary_objfile_end و _binary_objfile_size نامیده میشوند. برای مثال، میتوانید یک فایل تصویری را به یک فایل شیء تبدیل کرده و سپس در کد خود با استفاده از این نمادها به آن دسترسی داشته باشید.
- -j sectionpattern
- --only-section=sectionpattern
- تنها
بخشهای
مشخصشده
را از فایل
ورودی به
فایل خروجی
کپی میکند.
این گزینه
میتواند
بیش از یک
بار به کار
رود. توجه
داشته
باشید که
استفادهٔ
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند.
نویسههای
عامهنما
(wildcard) در sectionpattern
پذیرفته
میشوند.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بخشهای منطبق کپی نخواهند شد، حتی اگر استفادهٔ قبلی از --only-section در همان خط فرمان موجب کپی شدن آنها میشد. برای نمونه:
--only-section=.text.* --only-section=!.text.foo
تمام بخشهای منطبق با '.text.*' را کپی میکند، اما بخش '.text.foo' را کپی نخواهد کرد.
- -R sectionpattern
- --remove-section=sectionpattern
- هر بخشی را
که با sectionpattern
مطابقت
داشته باشد
از فایل
خروجی حذف
میکند. این
گزینه
میتواند
بیش از یک
بار مشخص
شود. توجه
داشته
باشید که
استفادهٔ
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند.
نویسههای
عامهنما
در sectionpattern
پذیرفته
میشوند.
استفادهٔ
همزمان از
هر دو
گزینهٔ -j و
-R منجر به
رفتار
تعریفنشده
(undefined behaviour) خواهد
شد.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بخشهای منطبق حذف نخواهند شد، حتی اگر استفادهٔ پیشین از --remove-section در همان خط فرمان در حالت عادی موجب حذف آنها میشد. برای نمونه:
--remove-section=.text.* --remove-section=!.text.foo
تمام بخشهای منطبق با الگوی '.text.*' را حذف میکند، اما بخش '.text.foo' را حذف نخواهد کرد.
- --keep-section=sectionpattern
- هنگام حذف بخشها از فایل خروجی، بخشهای منطبق با sectionpattern را نگه میدارد.
- --remove-relocations=sectionpattern
- بازجاگذاریهای
غیرپویا را
برای هر
بخشی که با
sectionpattern مطابقت
داشته باشد
از فایل
خروجی حذف
میکند. این
گزینه
میتواند
بیش از یک
بار به کار
رود. توجه
داشته
باشید که
استفادهٔ
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند؛
همچنین
تلاش برای
حذف
بخشهای
بازجاگذاری
پویا نظیر
.rela.plt از یک
فایل
اجرایی یا
کتابخانهٔ
مشترک با
استفاده از
--remove-relocations=.plt کار
نخواهد کرد.
نویسههای
عامهنما
در sectionpattern
پذیرفته
میشوند.
برای نمونه:
--remove-relocations=.text.*
بازجاگذاریها را برای تمام بخشهای منطبق با الگوی '.text.*' حذف خواهد کرد.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بازجاگذاریهای بخشهای منطبق حذف نخواهند شد، حتی اگر استفادهٔ قبلی از --remove-relocations در همان خط فرمان موجب حذف آنها میشد. برای نمونه:
--remove-relocations=.text.* --remove-relocations=!.text.foo
تمام بازجاگذاریهای بخشهای منطبق با الگوی '.text.*' را حذف میکند، ولی بازجاگذاریهای بخش '.text.foo' را حذف نخواهد کرد.
- --strip-section-headers
- سرآیندهای بخشها (section headers) را پاک میکند. این گزینه ویژهٔ فایلهای ELF است و بهطور ضمنی شامل --strip-all و --merge-notes نیز میشود.
- -S
- --strip-all
- اطلاعات بازجاگذاری و نمادها را از فایل مبدأ کپی نمیکند. همچنین بخشهای اشکالزدایی را حذف میکند.
- -g
- --strip-debug
- نمادها یا بخشهای اشکالزدایی را از فایل مبدأ کپی نمیکند.
- --strip-unneeded
- علاوه بر نمادها و بخشهای اشکالزدایی که توسط --strip-debug پاک میشوند، تمام نمادهایی را که برای پردازش بازجاگذاریها مورد نیاز نیستند نیز حذف میکند.
- -K symbolname
- --keep-symbol=symbolname
- هنگام پاکسازی نمادها، نماد symbolname را حتی اگر در حالت عادی باید پاک میشد، نگه میدارد. این گزینه میتواند بیش از یک بار مشخص شود..IP "-N symbolname" 4
- --strip-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-unneeded-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند مگر آنکه برای یک بازتخصیص (relocation) مورد نیاز باشد. این گزینه میتواند بیش از یک بار مشخص شود.
- -G symbolname
- --keep-global-symbol=symbolname
- تنها نماد symbolname را سراسری (global) نگه میدارد. همه نمادهای دیگر را برای فایل محلی (local) میکند تا از بیرون قابل مشاهده نباشند. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه نمیتواند در ترکیب با گزینههای --globalize-symbol یا --globalize-symbols استفاده شود.
- --localize-hidden
- در یک شیء ELF، تمام نمادهایی را که دید پنهان (hidden) یا داخلی (internal) دارند به عنوان محلی علامتگذاری میکند. این گزینه علاوهبر گزینههای محلیسازی مختص نماد، مانند -L اعمال میشود.
- -L symbolname
- --localize-symbol=symbolname
- یک نماد سراسری یا ضعیف (weak) به نام symbolname را به یک نماد محلی تبدیل میکند، بهطوری که از بیرون قابل مشاهده نباشد. این گزینه میتواند بیش از یک بار مشخص شود. نکته - نمادهای یکتا (unique symbols) تبدیل نمیشوند.
- -W symbolname
- --weaken-symbol=symbolname
- نماد symbolname را به نماد ضعیف تبدیل میکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --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” تضعیف (weak) کند.
- -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 تعریف شده باشد. در صورت تعریف شدن، این متغیر به عنوان تاریخ ذخیرهشده در سرایند استفاده خواهد شد که به عنوان تعداد ثانیههای سپریشده از مبدأ یونیکس (Unix 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 لایهگذاری (pad) میکند. این کار با افزایش اندازهٔ آخرین بخش انجام میشود. فضای اضافی با مقدار مشخصشده توسط --gap-fill (پیشفرض صفر) پر میشود.
- --set-start val
- نشانی آغازین (که به عنوان نشانی ورود نیز شناخته میشود) فایل جدید را روی val تنظیم میکند. تمام قالبهای فایل شیء از تنظیم نشانی آغازین پشتیبانی نمیکنند..IP "--change-start incr" 4
- --adjust-start incr
- تغییر آدرس شروع (که به عنوان آدرس ورودی یا entry address نیز شناخته میشود) با افزودن incr. همه قالبهای فایل شیء از تنظیم آدرس شروع پشتیبانی نمیکنند.
- --change-addresses incr
- --adjust-vma incr
- تغییر آدرسهای VMA و LMA تمام بخشها، و همچنین آدرس شروع، با افزودن incr. برخی از قالبهای فایل شیء اجازه تغییر دلخواه آدرس بخشها را نمیدهند. توجه داشته باشید که این گزینه بخشها را بازنشانی (relocate) نمیکند؛ اگر برنامه انتظار داشته باشد که بخشها در آدرس مشخصی بارگذاری شوند، و از این گزینه برای تغییر دادن بخشها به گونهای استفاده شود که در آدرس متفاوتی بارگذاری شوند، ممکن است برنامه با شکست مواجه شود.
- --change-section-address sectionpattern{=,+,-}val
- --adjust-section-vma sectionpattern{=,+,-}val
- تنظیم یا تغییر هر دو آدرس VMA و LMA هر بخشی که با sectionpattern مطابقت دارد. اگر از = استفاده شود، آدرس بخش روی val تنظیم میشود. در غیر این صورت، val به آدرس بخش اضافه یا از آن کسر میگردد. توضیحات زیر --change-addresses در بالا را ببینید. اگر sectionpattern با هیچ بخشی در فایل ورودی مطابقت نداشته باشد، یک هشدار صادر خواهد شد، مگر اینکه از --no-change-warnings استفاده شود.
- --change-section-lma sectionpattern{=,+,-}val
- تنظیم یا تغییر آدرس LMA هر بخشی که با sectionpattern مطابقت دارد. آدرس LMA آدرسی است که بخش در زمان بارگذاری برنامه، در آن آدرس در حافظه بارگذاری خواهد شد. معمولاً این مقدار با آدرس VMA یکسان است (که آدرس بخش در زمان اجرای برنامه است)، اما در برخی سیستمها، بهویژه سیستمهایی که برنامه در ROM نگهداری میشود، این دو میتوانند متفاوت باشند. اگر از = استفاده شود، آدرس بخش روی val تنظیم میشود. در غیر این صورت، val به آدرس بخش افزوده یا از آن کسر میگردد. توضیحات زیر --change-addresses در بالا را ببینید. اگر sectionpattern با هیچ بخشی در فایل ورودی مطابقت نداشته باشد، یک هشدار صادر خواهد شد، مگر اینکه از --no-change-warnings استفاده شود.
- --change-section-vma sectionpattern{=,+,-}val
- تنظیم یا
تغییر آدرس
VMA هر بخشی که
با sectionpattern
مطابقت
دارد. آدرس VMA
آدرسی است
که بخش پس
از آغاز
اجرای
برنامه در
آن قرار
خواهد گرفت.
معمولاً
این مقدار
با آدرس LMA
یکسان است
(که آدرس
بارگذاری
بخش در
حافظه است)،
اما در برخی
سیستمها،
بهویژه
مواردی که
برنامه در ROM
نگهداری
میشود،
این دو
میتوانند
متفاوت
باشند. اگر
از =
استفاده
شود، آدرس
بخش روی val
تنظیم
میشود. در
غیر این
صورت، val به
آدرس بخش
اضافه یا از
آن کسر
میگردد.
توضیحات
زیر --change-addresses در
بالا را
ببینید. اگر
sectionpattern با هیچ
بخشی در
فایل ورودی
مطابقت
نداشته
باشد، یک
هشدار صادر
خواهد شد،
مگر اینکه
از --no-change-warnings
استفاده
شود.
نکته - تغییر VMA بخشها در یک فایل باینری کاملاً پیوندخورده (fully linked) میتواند خطرناک باشد، زیرا ممکن است کدهایی وجود داشته باشند که انتظار دارند بخشها در آدرس قدیمیشان قرار داشته باشند.
- --change-warnings
- --adjust-warnings
- اگر از --change-section-address یا --change-section-lma یا --change-section-vma استفاده شود، و الگوی بخش با هیچ بخشی تطابق نداشته باشد، یک هشدار صادر کن. این رفتار پیشفرض است.
- --no-change-warnings
- --no-adjust-warnings
- در صورت استفاده از --change-section-address یا --adjust-section-lma یا --adjust-section-vma، حتی اگر الگوی بخش با هیچ بخشی مطابقت نداشته باشد، هیچ هشداری صادر نکن.
- --set-section-flags sectionpattern=flags
- تنظیم پرچمها برای هر بخشی که با sectionpattern مطابقت دارد. آرگومان flags یک رشته از نامهای پرچم است که با کاما از هم جدا شدهاند. نامهای شناختهشده عبارتند از: alloc، contents، load، noload، readonly، code، data، rom، exclude، share، debug و large. میتوانید پرچم contents را برای بخشی که محتوایی ندارد تنظیم کنید، اما پاک کردن پرچم contents از بخشی که دارای محتوا است معنادار نیست--در عوض فقط آن بخش را حذف کنید. همه پرچمها برای تمام قالبهای فایل شیء معنادار نیستند. بهویژه پرچم share تنها برای فایلهای با قالب COFF معنی دارد و برای فایلهای قالب ELF کاربردی ندارد. پرچم اختصاصی ELF در معماری x86-64 با نام large متناظر با SHF_X86_64_LARGE است.
- --set-section-alignment sectionpattern=align
- تنظیم تراز
(alignment) برای هر
بخشی که با
sectionpattern مطابقت
دارد. align
تراز را بر
حسب بایت
مشخص
میکند و
باید توانی
از دو باشد،
یعنی ۱، ۲،
۴، ۸ و...
نکته - تنظیم تراز یک بخش، آدرسهای LMA یا VMA آن را بهطور خودکار تراز نخواهد کرد. اگر لازم باشد که آنها نیز تغییر کنند، باید از گزینههای --change-section-lma و/یا --change-section-vma استفاده شود. همچنین توجه داشته باشید که تغییر دادن VMAها میتواند در باینریهای کاملاً پیوندخورده مشکلاتی ایجاد کند، زیرا ممکن است کدهایی وجود داشته باشند که انتظار دارند محتویات بخشها در آدرس قبلی آنها قرار گرفته باشد.
- --add-section sectionname=filename
- افزودن یک بخش جدید به نام sectionname هنگام کپی کردن فایل. محتویات بخش جدید از فایل filename خوانده میشود. اندازه بخش، برابر با اندازه فایل خواهد بود. این گزینه فقط در قالبهای فایلی کار میکند که از بخشهایی با نامهای دلخواه پشتیبانی میکنند. نکته - ممکن است لازم باشد برای تنظیم ویژگیهای بخش تازهایجادشده، از گزینه --set-section-flags استفاده شود.
- --dump-section sectionname=filename
- قرار دادن محتویات بخشِ با نام sectionname درون فایل filename و رونویسی هرگونه محتوایی که ممکن است پیشتر در آن وجود داشته باشد. این گزینه معکوس --add-section است. این گزینه مشابه گزینه --only-section است، با این تفاوت که فایل قالببندیشده ایجاد نمیکند، بلکه صرفاً محتویات را بهصورت دادههای باینری خام، بدون اعمال هیچگونه بازنشانی (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]
- افزودن یک نماد (symbol) جدید با نام name هنگام کپی کردن فایل. این گزینه را میتوان چندین بار مشخص کرد. اگر section مشخص شود، نماد با آن بخش مرتبط و نسبت به آن نسبی خواهد بود، در غیر این صورت یک نماد ABS خواهد بود. تعیین یک بخش تعریفنشده منجر به خطای مهلک خواهد شد. هیچ بررسی روی مقدار انجام نمیگیرد و دقیقاً همانطور که مشخص شده دریافت میشود. پرچمهای نماد را میتوان تعیین کرد و همه پرچمها برای تمامی قالبهای فایل شیء معنادار نیستند. بهطور پیشفرض، نماد بهصورت سراسری (global) خواهد بود. پرچم ویژه 'before=othersym' نماد جدید را قبل از othersym تعیینشده درج میکند، در غیر این صورت نماد(ها) به ترتیبی که وارد شدهاند در انتهای جدول نمادها افزوده خواهند شد.
- --rename-section oldname=newname[,flags]
- تغییر نام
یک بخش از oldname
به newname، و به
صورت
اختیاری
تغییر دادن
پرچمهای
بخش به flags در
حین این
فرآیند. این
روش نسبت به
استفاده از
اسکریپت
پیونددهنده
(linker script) برای
تغییر نام،
این مزیت را
دارد که
خروجی
همچنان یک
فایل شیء
باقی
میماند و
تبدیل به یک
فایل
اجرایی
پیوندخورده
نمیشود.
این گزینه
همان
مجموعه
پرچمهای
گزینه --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 در حال اجرا باشد، هرگونه نام طولانی بخش در شیء ورودی کوتاه خواهد شد. گزینه enable تنها در صورتی نامهای طولانی بخش را تولید میکند که در ورودیها موجود باشند؛ این حالت عمدتاً مشابه keep است، اما این مسئله که آیا گزینه enable ممکن است ایجاد یک جدول رشتههای خالی در فایل خروجی را اجباری کند یا خیر، تعریفنشده باقی مانده است.
- --change-leading-char
- برخی از قالبهای فایل شیء از نویسههای خاصی در ابتدای نمادها استفاده میکنند. متداولترین این نویسهها زیرخط (underscore) است که کامپایلرها اغلب آن را قبل از هر نماد اضافه میکنند. این گزینه به objcopy میگوید که هنگام تبدیل بین قالبهای فایل شیء، نویسه آغازین هر نماد را تغییر دهد. اگر قالبهای فایل شیء از نویسه آغازین یکسانی استفاده کنند، این گزینه هیچ اثری ندارد. در غیر این صورت، بر حسب لزوم نویسهای را اضافه، حذف یا تغییر خواهد داد.
- --remove-leading-char
- اگر اولین
نویسه یک
نماد
سراسری،
نویسه خاص
آغازین
نماد باشد
که توسط
قالب فایل
شیء
استفاده
شده است، آن
نویسه را
حذف کن.
متداولترین
نویسه
آغازین
نماد،
زیرخط (underscore)
است. این
گزینه
زیرخط
آغازین را
از تمام
نمادهای
سراسری حذف
خواهد کرد.
این ویژگی
میتواند
زمانی مفید
باشد که
بخواهید
اشیاء با
قالبهای
فایل مختلف
را که قواعد
نامگذاری
متفاوتی
برای
نمادها
دارند به
یکدیگر
پیوند دهید.
این گزینه
با --change-leading-char
تفاوت دارد
زیرا
صرفنظر از
قالب فایل
شیءِ فایل
خروجی، در
صورت لزوم
همواره نام
نماد را
تغییر
میدهد..IP
--reverse-bytes=num 4
بایتها را
در بخشی با
محتویات
خروجی
معکوس
میکند.
برای اینکه
امکان
جابهجایی
بایتها
وجود داشته
باشد، طول
بخش باید بر
مقدار
دادهشده
بخشپذیر
باشد.
معکوسسازی
پیش از
انجام
درهمبافی
(interleaving) صورت
میگیرد.
این گزینه معمولاً در تولید تصاویر ROM برای سیستمهای مقصد خاص و مشکلساز بهکار میرود. برای نمونه، در برخی بردهای مقصد، کلمات ۳۲بیتی که از ROMهای ۸بیتی واکشی میشوند، بدون در نظر گرفتن ترتیب بایت پردازنده، با ترتیب بایت little-endian بازترکیب میشوند. بسته به مدل برنامهنویسی، ممکن است نیاز باشد ترتیب بایتها (endianness) در ROM اصلاح شود.
یک فایل ساده با بخشی شامل هشت بایت زیر را در نظر بگیرید: 12345678.
با استفاده از --reverse-bytes=2 برای مثال بالا، بایتها در فایل خروجی به صورت 21436587 مرتب خواهند شد.
با استفاده از --reverse-bytes=4 برای مثال بالا، بایتها در فایل خروجی به صورت 43218765 مرتب خواهند شد.
با استفاده از --reverse-bytes=2 برای مثال بالا، و سپس اجرای --reverse-bytes=4 روی فایل خروجی، بایتها در فایل خروجی دوم به صورت 34127856 مرتب خواهند شد.
- --srec-len=ival
- تنها برای خروجی srec معنادار است. حداکثر طول S-recordهای تولیدی را روی 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) تبدیل میکند. این گزینه هنگام ساخت یک فایل شیء (object) که قرار است با استفاده از گزینهٔ -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
- بخش متن خروجی را در برابر نوشتن محافظت میکند (فقطخواندنی). این گزینه برای تمام قالبهای فایل شیء معنادار نیست.
- --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
را در خروجی
حفظ میکند.
نکته - سرآیندهای بخشهای پیراستهشده، شامل اندازه آنها، حفظ میشوند اما محتویات بخش دور ریخته میشود. سرآیندهای بخش برای این حفظ میشوند تا سایر ابزارها بتوانند فایل debuginfo را با فایل اجرایی واقعی تطبیق دهند، حتی اگر آن فایل اجرایی به فضای نشانی متفاوتی منتقل (relocate) شده باشد.
هدف از این گزینه این است که در کنار --add-gnu-debuglink برای ایجاد یک فایل اجرایی دو بخشی استفاده شود: یکی یک باینری پیراستهشده که فضای کمتری در RAM و در توزیع اشغال میکند، و دیگری یک فایل اطلاعات اشکالزدایی که تنها در صورت نیاز به قابلیتهای دیباگ به آن نیاز خواهد بود. روند پیشنهادی برای ساخت این فایلها به شرح زیر است:
- 1.
- فایل اجرایی را طبق روال معمول پیوند دهید. با فرض اینکه نام آن "foo" باشد، سپس....IP 2. 4 اجرای دستور "objcopy --only-keep-debug foo foo.dbg" برای ایجاد فایلی حاوی اطلاعات اشکالزدایی.
- 3.
- اجرای دستور "objcopy --strip-debug foo" برای ایجاد یک فایل اجرایی پیراسته (stripped).
- 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 ساخته شده است.
نکته---این سوییچ تنها برای استفاده روی فایلهای کاملاً پیوندخورده در نظر گرفته شده است. استفاده از آن روی فایلهای شیء (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 و برای dllها 0x10000000 است. [این گزینه مختص اهداف PE است.]
- --section-alignment num
- [این گزینه
مختص اهداف
PE است.]
تنظیم فیلد تراز بخش (section alignment) در سرآیند PE - در صورتی که در فایل دودویی موجود باشد. بخشها در حافظه همواره در آدرسهایی آغاز خواهند شد که مضربی از این عدد باشند. مقدار پیشفرض 0x1000 است.
نکته - اگر آدرسهای LMA یا VMA یک بخش دیگر تراز نباشند، و این آدرسها از طریق گزینههای --set-section-lma یا --set-section-vma تنظیم نشده باشند، و فایل به طور کامل بازآرایی شده باشد، یک پیام هشدار صادر خواهد شد. سپس این بر عهدهٔ کاربر خواهد بود که تصمیم بگیرد آیا LMA و VMA نیاز به بهروزرسانی دارند یا خیر.
- --stack reserve
- --stack reserve,commit
- مشخص کردن مقدار بایتهای حافظه برای رزرو (و در صورت تمایل تخصیص قطعی/commit) جهت استفاده به عنوان پشته (stack) برای این برنامه. [این گزینه مختص اهداف PE است.]
- --subsystem which
- --subsystem which:major
- --subsystem which:major.minor
- مشخص کردن زیرسیستمی که برنامهٔ شما تحت آن اجرا خواهد شد. مقادیر مجاز برای which عبارتند از "native"، "windows"، "console"، "posix"، "efi-app"، "efi-bsd"، "efi-rtd"، "sal-rtd" و "xbox". همچنین میتوانید به صورت اختیاری نسخهٔ زیرسیستم را نیز تنظیم کنید. مقادیر عددی نیز برای which پذیرفته میشوند. [این گزینه مختص اهداف PE است.]
- --extract-symbol
- پرچمهای بخش (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، این گزینهها مشخص میکنند که آیا نمادهای عمومی باید به نوع "STT_COMMON" یا "STT_OBJECT" تبدیل شوند یا خیر. --elf-stt-common=yes نوع نماد عمومی را به "STT_COMMON" تبدیل میکند. --elf-stt-common=no نوع نماد عمومی را به "STT_OBJECT" تبدیل میکند.
- --merge-notes
- --no-merge-notes
- برای فایلهای ELF، تلاش (یا عدم تلاش) برای کاهش اندازهٔ هر یک از بخشهای از نوع SHT_NOTE با حذف یادداشتهای تکراری.
- -V
- --version
- نمایش شماره نسخهٔ objcopy.
- --verilog-data-width=bytes
- برای خروجی Verilog، این گزینه تعداد بایتهای تبدیلشده برای هر عنصر دادهٔ خروجی را کنترل میکند. هدف ورودی، ترتیب بایتها (endianness) در تبدیل را کنترل میکند.
- -v
- --verbose
- خروجی با جزئیات: فهرست کردن تمام فایلهای شیءِ تغییریافته. در مورد آرشیوها، objcopy -V تمام اعضای آرشیو را فهرست میکند..IP --help 4 نمایش خلاصهای از گزینههای objcopy.
- --info
- نمایش فهرستی از تمام معماریها و قالبهای شیء در دسترس.
- @file
- خواندن
گزینههای
خط فرمان از
file.
گزینههای
خواندهشده
بهجای
گزینهٔ
اصلی @file
قرار
میگیرند.
اگر file وجود
نداشته
باشد یا
قابل
خواندن
نباشد، با
گزینه
بهصورت
تحتاللفظی
رفتار
میشود و
حذف نخواهد
شد.
گزینهها در file با نویسههای فاصله خالی (whitespace) از یکدیگر جدا میشوند. یک نویسهٔ فاصله را میتوان با قرار دادن کل گزینه درون علامتهای نقلقول تکی یا دوتایی، در گزینه گنجاند. هر نویسهای (از جمله بکاسلش) را میتوان با درج یک بکاسلش بهعنوان پیشوندِ آن، اضافه کرد. خود file نیز ممکن است شامل گزینههای @file دیگری باشد؛ چنین گزینههایی بهصورت بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
ld(1)، objdump(1) و مدخلهای Info برای binutils.
کپیرایت و تکثیر (COPYRIGHT)
کپیرایت (c) 1991-2026 متعلق به Free Software Foundation, Inc.
مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخهٔ 1.3 یا هر نسخهٔ متأخرتر منتشر شده توسط بنیاد نرمافزارهای آزاد (Free Software Foundation) صادر شده است؛ بدون بخشهای تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. یک نسخه از این مجوز در بخشی با عنوان «GNU Free Documentation License» گنجانده شده است.
| 2026-08-31 | binutils-2.47 |