| 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)" ابزار objcopy
گنو
محتویات یک
فایل شیء (object file)
را به فایلی
دیگر
رونوشت
میکند. objcopy
برای
خواندن و
نوشتن
فایلهای
شیء از
کتابخانهٔ GNU
BFD استفاده
میکند. این
ابزار
میتواند
فایل شیء
مقصد را در
قالبی
متفاوت از
فایل شیء
مبدأ
بنویسد.
رفتار دقیق
objcopy با
گزینههای
خط فرمان
کنترل
میشود.
توجه داشته
باشید که objcopy
باید
بتواند یک
فایل
کاملاً
پیوندخورده
را میان هر
دو قالبی
رونوشت کند.
با این حال،
رونوشت یک
فایل شیء
بازجاگذاریپذیر
(relocatable) میان هر
دو قالب
دلخواه
ممکن است
طبق انتظار
کار نکند.
objcopy برای انجام تبدیلهای خود فایلهای موقتی میسازد و سپس آنها را حذف میکند. objcopy برای تمام کارهای تبدیل از BFD استفاده میکند؛ این ابزار به تمام قالبهای شرحدادهشده در BFD دسترسی دارد و بنابراین میتواند بیشتر قالبها را بدون نیاز به مشخص شدن صریح تشخیص دهد.
objcopy میتواند با استفاده از هدف خروجی srec برای تولید S-recordها به کار رود (برای مثال استفاده از -O srec).
objcopy میتواند با استفاده از هدف خروجی binary برای تولید یک فایل باینری خام به کار رود (برای مثال استفاده از -O binary). هنگامی که objcopy یک فایل باینری خام تولید میکند، اساساً یک دامپ حافظه از محتویات فایل شیء ورودی ایجاد خواهد کرد. تمامی نمادها و اطلاعات بازجاگذاری (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
مطابقت
داشته باشد
از فایل
خروجی حذف
میکند. این
گزینه
میتواند
بیش از یک
بار مشخص
شود. توجه
داشته
باشید که
استفادهٔ
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند.
نویسههای
عام در sectionpattern
پذیرفته
میشوند.
استفادهٔ
همزمان از
هر دو
گزینهٔ -j و
-R به رفتار
تعریفنشده
منجر
میشود.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بخشهای منطبق حذف نخواهند شد، حتی اگر استفادهٔ قبلی از --remove-section در همان خط فرمان سبب حذف آن میشد. برای مثال:
--remove-section=.text.* --remove-section=!.text.foo
تمام بخشهای منطبق با الگوی '.text.*' را حذف خواهد کرد، اما بخش '.text.foo' را حذف نخواهد کرد.
- --keep-section=sectionpattern
- هنگام حذف بخشها از فایل خروجی، بخشهایی را که با sectionpattern مطابقت دارند نگه میدارد.
- --remove-relocations=sectionpattern
- بازجاگذاریهای
غیرپویا (non-dynamic
relocations) را از
فایل خروجی
برای هر
بخشی که با
sectionpattern مطابقت
دارد حذف
میکند. این
گزینه
میتواند
بیش از یک
بار مشخص
شود. توجه
داشته
باشید که
استفادهٔ
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند، و تلاش
برای حذف یک
بخش
بازجاگذاری
پویا مانند
.rela.plt از یک
فایل
اجرایی یا
کتابخانهٔ
اشتراکی با
استفاده از
--remove-relocations=.plt کار
نخواهد کرد.
نویسههای
عام در sectionpattern
پذیرفته
میشوند.
برای مثال:
--remove-relocations=.text.*
بازجاگذاریهای تمام بخشهای منطبق با الگوی '.text.*' را حذف خواهد کرد.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بازجاگذاریهای بخشهای منطبق حذف نخواهند شد، حتی اگر استفادهٔ قبلی از --remove-relocations در همان خط فرمان سبب حذف بازجاگذاریها میشد. برای مثال:
--remove-relocations=.text.* --remove-relocations=!.text.foo
تمام بازجاگذاریهای بخشهای منطبق با الگوی '.text.*' را حذف خواهد کرد، اما بازجاگذاریهای بخش '.text.foo' را حذف نخواهد کرد.
- --strip-section-headers
- سرآیندهای بخش را پاکسازی میکند. این گزینه مختص فایلهای ELF است. گزینههای --strip-all و --merge-notes را نیز در بر دارد.
- -S
- --strip-all
- اطلاعات بازجاگذاری و نمادها را از فایل مبدأ رونوشت نمیکند. همچنین بخشهای اشکالزدایی (debug sections) را حذف میکند..IP -g 4
- --strip-debug
- نمادها یا بخشهای اشکالزدایی (debugging) را از فایل مبدأ کپی نمیکند.
- --strip-unneeded
- علاوه بر نمادها و بخشهای اشکالزدایی حذفشده توسط --strip-debug، تمام نمادهایی را که برای پردازش بازنشانی (relocation) مورد نیاز نیستند نیز حذف میکند.
- -K symbolname
- --keep-symbol=symbolname
- هنگام حذف نمادها، نماد symbolname را حتی اگر در حالت عادی حذف میشد، نگه میدارد. این گزینه میتواند بیش از یک بار مشخص شود.
- -N symbolname
- --strip-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-unneeded-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند، مگر اینکه برای یک بازنشانی (relocation) مورد نیاز باشد. این گزینه میتواند بیش از یک بار مشخص شود.
- -G symbolname
- --keep-global-symbol=symbolname
- تنها نماد symbolname را به عنوان سراسری (global) نگه میدارد. تمام نمادهای دیگر را نسبت به فایل محلی (local) میکند تا از بیرون قابل مشاهده نباشند. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه نمیتواند همراه با گزینههای --globalize-symbol یا --globalize-symbols استفاده شود.
- --localize-hidden
- در یک شیء ELF، همهٔ نمادهایی را که دارای سطح دید پنهان (hidden) یا داخلی (internal) هستند به عنوان محلی علامتگذاری میکند. این گزینه علاوهبر گزینههای محلیسازی نمادهای خاص مانند -L اعمال میشود.
- -L symbolname
- --localize-symbol=symbolname
- یک نماد سراسری یا ضعیف (weak) به نام symbolname را به یک نماد محلی تبدیل میکند تا از بیرون قابل مشاهده نباشد. این گزینه میتواند بیش از یک بار مشخص شود. نکته - نمادهای منحصربهفرد (unique) تبدیل نمیشوند.
- -W symbolname
- --weaken-symbol=symbolname
- نماد symbolname را ضعیف (weak) میکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --globalize-symbol=symbolname
- به نماد symbolname حوزهٔ سراسری (global scoping) میدهد تا در خارج از فایلی که در آن تعریف شده است، قابل مشاهده باشد. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه نمیتواند همراه با گزینههای -G یا --keep-global-symbol استفاده شود.
- -w
- --wildcard
- استفاده از
عبارات
باقاعده (regular
expressions) را در
symbolnameهای به
کار رفته در
دیگر
گزینههای
خط فرمان
مجاز
میکند.
عملگرهای
علامت سؤال
(؟)، ستاره (*)،
ممیز
وارونه (\) و
قلابها ([])
میتوانند
در هر کجای
نام نماد به
کار روند.
اگر نخستین
نویسهٔ نام
نماد،
علامت تعجب
(!) باشد،
مفهوم
گزینه برای
آن نماد
معکوس
میشود.
برای نمونه:
-w -W !foo -W fo*
باعث میشود که objcopy تمام نمادهایی را که با "fo" شروع میشوند به جز نماد "foo" ضعیف کند.
- -x
- --discard-all
- نمادهای غیرسراسری را از فایل مبدأ کپی نمیکند.
- -X
- --discard-locals
- نمادهای محلی ایجادشده توسط کامپایلر را کپی نمیکند. (این نمادها معمولاً با L یا . آغاز میشوند.)
- -b byte
- --byte=byte
- اگر درهمبافی (interleaving) از طریق گزینهٔ --interleave فعال شده باشد، بازهٔ بایتهای نگهداشتهشده را از بایت شمارهٔ byte آغاز میکند. مقدار byte میتواند در محدودهٔ 0 تا breadth-1 باشد، که در آن breadth مقداری است که توسط گزینهٔ --interleave تعیین شده است.
- -i [breadth]
- --interleave[=breadth]
- تنها یک
بازه را از
هر breadth بایت
کپی میکند.
(دادههای
سرآیند تحت
تأثیر قرار
نمیگیرند).
با گزینهٔ
--byte تعیین
کنید کدام
بایت در
بازه کپی را
آغاز کند.
پهنای بازه
را با
گزینهٔ --interleave-width
مشخص
نمایید.
این گزینه برای ساخت فایلها جهت برنامهریزی حافظهٔ ROM سودمند است. این گزینه معمولاً با یک خروجی هدف "srec" استفاده میشود. توجه داشته باشید که اگر گزینهٔ --byte را نیز تعیین نکنید، objcopy خطا خواهد داد.
پهنای گام پیشفرض درهمبافی برابر ۴ است، بنابراین با تنظیم --byte روی 0، objcopy نخستین بایت از هر چهار بایت را از ورودی به خروجی کپی خواهد کرد.
- --interleave-width=width
- هنگامی که
همراه با
گزینهٔ --interleave
استفاده
شود، هر بار
width بایت را
کپی میکند.
شروع بازهٔ
بایتهای
کپیشونده
توسط
گزینهٔ --byte و
اندازهٔ
بازه با
گزینهٔ --interleave
تنظیم
میشود.
مقدار پیشفرض این گزینه ۱ است. مجموع مقدار width به علاوهٔ مقدار byte تنظیمشده توسط گزینهٔ --byte نباید از پهنای درهمبافی تعیینشده با گزینهٔ --interleave فراتر رود.
این گزینه میتواند برای ایجاد ایمیجهایی برای دو فلش ۱۶ بیتی که در یک گذرگاه ۳۲ بیتی درهمبافته شدهاند، با ارسال -b 0 -i 4 --interleave-width=2 و -b 2 -i 4 --interleave-width=2 به دو دستور objcopy استفاده شود. اگر ورودی '12345678' باشد، خروجیها به ترتیب '1256' و '3478' خواهند بود.
- -p
- --preserve-dates
- تاریخهای
دسترسی و
تغییر فایل
خروجی را با
تاریخهای
فایل ورودی
یکسان قرار
میدهد.
این گزینه همچنین تاریخ ذخیرهشده در سرآیند یک فایل با قالب PE را کپی میکند، مگر آنکه متغیر محیطی SOURCE_DATE_EPOCH تعریف شده باشد. در صورت تعریف شدن، این متغیر به عنوان تاریخ ذخیرهشده در سرآیند استفاده میشود که به صورت تعداد ثانیههای سپریشده از مبدأ یونیکس (Unix epoch) تفسیر خواهد شد.
- -D
- --enable-deterministic-archives
- در حالت
قطعی (deterministic)
عمل میکند.
هنگام کپی
کردن اعضای
آرشیو و
نوشتن
نمایهٔ
آرشیو،
برای UIDها،
GIDها،
برچسبهای
زمانی از
صفر
استفاده
میکند و
حالتهای
فایلی
یکدست را
برای همهٔ
فایلها به
کار میبرد.
اگر binutils با --enable-deterministic-archives پیکربندی شده باشد، این حالت به صورت پیشفرض فعال است. میتوان آن را با گزینهٔ -U در زیر غیرفعال کرد.
- -U
- --disable-deterministic-archives
- در حالت deterministic
(معین) عمل
نکنید. این
معکوس
گزینهٔ -D
در بالا
است: هنگام
رونوشتبرداری
از اعضای
آرشیو و
نوشتن
نمایهٔ
آرشیو، از
مقادیر
واقعی UID، GID،
برچسب زمان
(timestamp) و حالت
فایل (file mode)
آنها
استفاده
کنید.
این حالت پیشفرض است، مگر اینکه 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 کاربردی ندارد. پرچم ویژهٔ large در ELF x86-64 متناظر با 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
تعیینشده
درج
میکند؛ در
غیر این
صورت
نماد(ها) به
همان
ترتیبی که
ظاهر
میشوند در
انتهای
جدول
نمادها
قرار
میگیرند..IP
"--rename-section
oldname=newname[,flags]" 4
تغییر نام
یک بخش از oldname
به newname، و به
صورت
اختیاری
تغییر
پرچمهای
بخش به flags در
طول این
فرایند. این
روش نسبت به
استفاده از
یک اسکریپت
پیونددهنده
برای انجام
تغییر نام
این مزیت را
دارد که
خروجی
همچنان به
عنوان یک
فایل شیء
باقی
میماند و
به یک فایل
اجرایی
پیوندخورده
تبدیل
نمیشود.
این گزینه
همان
مجموعه
پرچمهای
گزینهٔ
--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
- برخی از قالبهای فایل شیء از نویسههای ویژهای در ابتدای نمادها استفاده میکنند. رایجترین نویسه از این دست، زیرخط (underscore) است که کامپایلرها اغلب آن را پیش از هر نماد اضافه میکنند. این گزینه به objcopy میگوید که هنگام تبدیل بین قالبهای فایل شیء، نویسهٔ آغازین هر نماد را تغییر دهد. اگر قالبهای فایل شیء از نویسهٔ آغازین یکسانی استفاده کنند، این گزینه هیچ اثری نخواهد داشت. در غیر این صورت، بر حسب نیاز نویسهای را اضافه، حذف یا تغییر میدهد.
- --remove-leading-char
- اگر نخستین نویسهٔ یک نماد سراسری، نویسهٔ آغازین نماد ویژهای باشد که توسط قالب فایل شیء استفاده میشود، آن نویسه را حذف میکند. رایجترین نویسهٔ آغازین نماد، زیرخط است. این گزینه زیرخط آغازین را از تمام نمادهای سراسری حذف میکند. این امر زمانی میتواند مفید باشد که بخواهید شیءهایی از قالبهای فایلی مختلف با قراردادهای متفاوت برای نام نمادها را به یکدیگر پیوند دهید. این گزینه با --change-leading-char تفاوت دارد زیرا صرف نظر از قالب فایل شیء خروجی، در صورت لزوم همواره نام نماد را تغییر میدهد.
- --reverse-bytes=num
- بایتها را
در بخشی با
محتویات
خروجی
معکوس
میکند. طول
بخش باید بر
مقدار
دادهشده
بخشپذیر
باشد تا
تعویض
بایتها
بتواند
انجام شود.
معکوسسازی
پیش از
انجام
درهمبافی
(interleaving) صورت
میگیرد.
این گزینه معمولاً در تولید ایمیجهای ROM برای سیستمهای مقصد مسئلهدار استفاده میشود. برای مثال، در برخی از بردهای مقصد، کلمات ۳۲ بیتی واکشیشده از ROMهای ۸ بیتی، صرفنظر از ترتیب بایت پردازنده به صورت little-endian بازترکیب میشوند. بسته به مدل برنامهنویسی، ممکن است نیاز باشد ترتیب بایت (endianness) مربوط به ROM تغییر داده شود.
یک فایل ساده با بخشی شامل هشت بایت زیر را در نظر بگیرید: 12345678.
با استفاده از --reverse-bytes=2 برای مثال بالا، بایتها در فایل خروجی به صورت 21436587 مرتب خواهند شد.
با استفاده از --reverse-bytes=4 برای مثال بالا، بایتها در فایل خروجی به صورت 43218765 مرتب خواهند شد.
با استفاده از --reverse-bytes=2 برای مثال بالا، و به دنبال آن اجرای --reverse-bytes=4 بر روی فایل خروجی، بایتها در فایل خروجی دوم به صورت 34127856 مرتب خواهند شد.
- --srec-len=ival
- تنها برای خروجی srec معنی دارد. حداکثر طول رکوردهای S (یا Srecords) تولیدشده را روی ival تنظیم میکند. این طول شامل هر سه فیلد آدرس، داده و crc میشود.
- --srec-forceS3
- تنها برای خروجی srec معنی دارد. از تولید رکوردهای S1/S2 جلوگیری کرده و قالبی فقط حاوی رکوردهای S3 ایجاد میکند.
- --redefine-sym old=new
- نام یک نماد را از old به new تغییر میدهد. این گزینه زمانی مفید است که سعی دارید دو مؤلفه را که کد منبع آنها را ندارید به یکدیگر پیوند دهید و تداخل نام وجود دارد.
- --redefine-syms=filename
- گزینهٔ --redefine-sym را برای هر جفت نماد "old new" فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر خط آن یک جفت نماد قرار دارد. کامنتهای خطی میتوانند با نویسهٔ هش مشخص شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --weaken
- تمام نمادهای سراسری موجود در فایل را به ضعیف (weak) تبدیل میکند. این گزینه هنگام ساخت شیئی که قرار است با استفاده از گزینهٔ -R پیونددهنده با سایر اشیاء پیوند داده شود، میتواند مفید باشد. این گزینه تنها هنگام استفاده از قالب فایل شیئی که از نمادهای ضعیف پشتیبانی میکند مؤثر است.
- --keep-symbols=filename
- گزینهٔ --keep-symbol را برای هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. کامنتهای خطی میتوانند با نویسهٔ هش مشخص شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-symbols=filename
- گزینهٔ --strip-symbol را برای هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. کامنتهای خطی میتوانند با نویسهٔ هش مشخص شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-unneeded-symbols=filename
- گزینهٔ --strip-unneeded-symbol را برای هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. کامنتهای خطی میتوانند با نویسهٔ هش مشخص شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --keep-global-symbols=filename
- گزینهٔ --keep-global-symbol را برای هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. کامنتهای خطی میتوانند با نویسهٔ هش مشخص شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --localize-symbols=filename
- گزینهٔ --localize-symbol را برای هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. کامنتهای خطی میتوانند با نویسهٔ هش مشخص شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --globalize-symbols=filename
- گزینهٔ --globalize-symbol را برای هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. کامنتهای خطی میتوانند با نویسهٔ هش مشخص شوند. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه نمیتواند همراه با گزینههای -G یا --keep-global-symbol استفاده شود.
- --weaken-symbols=filename
- گزینهٔ --weaken-symbol را برای هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر خط آن یک نام نماد قرار دارد. کامنتهای خطی میتوانند با نویسهٔ هش مشخص شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --alt-machine-code=index
- اگر معماری خروجی کدهای ماشین جایگزین داشته باشد، به جای کد پیشفرض از کد indexام استفاده میکند. این گزینه در مواردی مفید است که به یک ماشین کدی رسمی اختصاص داده شده و زنجیرهٔ ابزار از کد جدید استفاده میکند، اما سایر برنامهها همچنان به استفاده از کد اولیه وابستهاند. برای معماریهای مبتنی بر 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 را
به عنوان
پیشوند به
تمام
نامهای
بخشهای
تخصیصیافته
در فایل
خروجی
اضافه
میکند..IP
--add-gnu-debuglink=path-to-file 4 یک
بخش .gnu_debuglink
ایجاد
میکند که
حاوی
ارجاعی به
path-to-file است و آن
را به فایل
خروجی
اضافه
میکند.
نکته: فایل
در path-to-file باید
وجود داشته
باشد. بخشی
از فرایند
افزودن بخش
.gnu_debuglink شامل
گنجاندن یک
چکسام از
محتویات
فایل
اطلاعات
اشکالزدایی
در این بخش
است.
اگر فایل اطلاعات اشکالزدایی در یک مکان ساخته شده اما قرار است بعداً در مکان دیگری نصب شود، از مسیر مکان نصب استفاده نکنید. گزینهٔ --add-gnu-debuglink با شکست مواجه خواهد شد زیرا فایل نصبشده هنوز وجود ندارد. در عوض فایل اطلاعات اشکالزدایی را در دایرکتوری جاری قرار دهید و از گزینهٔ --add-gnu-debuglink بدون هیچ جزء دایرکتوری استفاده کنید، مانند این:
objcopy --add-gnu-debuglink=foo.debug
در زمان اشکالزدایی، اشکالزدا تلاش خواهد کرد تا فایل مجزای اطلاعات اشکالزدایی را در مجموعهای از مکانهای شناختهشده جستجو کند. مجموعهٔ دقیق این مکانها بسته به توزیع مورد استفاده متغیر است، اما معمولاً شامل موارد زیر است:
- "* همان دایرکتوری حاوی فایل اجرایی."
- "* یک زیردایرکتوری از دایرکتوری حاوی فایل اجرایی"
- به نام .debug
- "* یک دایرکتوری اشکالزدایی سراسری مانند /usr/lib/debug."
تا زمانی که فایل اطلاعات اشکالزدایی پیش از اجرای اشکالزدا در یکی از این مکانها نصب شده باشد، همهچیز باید بهدرستی کار کند.
- --keep-section-symbols
- هنگام پیراستن یک فایل، احتمالاً با --strip-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 ایجاد شده است.
نکته---این سوییچ تنها برای استفاده روی فایلهای کاملاً پیوندخورده در نظر گرفته شده است. استفاده از آن روی فایلهای شیء (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
- همترازی فایل را مشخص میکند. بخشها در فایل همیشه در آفستهایی از فایل آغاز میشوند که مضربی از این عدد باشند. مقدار پیشفرض 512 است. [این گزینه مخصوص اهداف PE است.]
- --heap reserve
- --heap reserve,commit
- تعداد بایتهای حافظه را برای رزرو کردن (و به صورت اختیاری commit کردن) جهت استفاده بهعنوان هیپ (heap) برای این برنامه مشخص میکند. [این گزینه مخصوص اهداف PE است.]
- --image-base value
- از value بهعنوان آدرس پایهٔ برنامه یا dll شما استفاده میکند. این پایینترین مکان حافظه است که هنگام بارگذاری برنامه یا dll شما استفاده خواهد شد. برای کاهش نیاز به بازنشانی و بهبود کارایی dllهای خود، هر کدام باید یک آدرس پایهٔ یکتا داشته باشند و با هیچ dll دیگری همپوشانی نداشته باشند. مقدار پیشفرض برای فایلهای اجرایی 0x400000 و برای dllها 0x10000000 است. [این گزینه مخصوص اهداف PE است.]
- --section-alignment num
- [این گزینه
مخصوص
اهداف PE است.]
فیلد همترازی بخش را در سرآیند PE تنظیم میکند - در صورتی که در باینری موجود باشد. بخشها در حافظه همیشه در آدرسهایی آغاز خواهند شد که مضربی از این عدد باشند. پیشفرض 0x1000 است.
نکته - اگر آدرسهای LMA یا VMA یک بخش دیگر همتراز نباشند، و آن آدرسها از طریق گزینههای --set-section-lma یا --set-section-vma تنظیم نشده باشند، و فایل بهطور کامل بازنشانی شده باشد، یک پیام هشدار صادر خواهد شد. سپس تصمیمگیری در مورد اینکه آیا LMA و VMA نیاز به بهروزرسانی دارند یا خیر بر عهدهٔ کاربر خواهد بود.
- --stack reserve
- --stack reserve,commit
- تعداد بایتهای حافظه را برای رزرو کردن (و به صورت اختیاری 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 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
- خروجی پرگو: تمام فایلهای شیءِ تغییریافته را فهرست میکند. در مورد آرشیوها، 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 |