| 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)" ابزار GNU
objcopy محتویات
یک فایل شیء
(object file) را در
فایلی دیگر
کپی میکند.
objcopy برای
خواندن و
نوشتن
فایلهای
شیء از
کتابخانهٔ GNU
BFD استفاده
میکند. این
ابزار
میتواند
فایل شیء
مقصد را در
قالبی
متفاوت از
فایل شیء
مبدأ
بنویسد.
رفتار دقیق
objcopy توسط
گزینههای
خط فرمان
کنترل
میشود.
توجه داشته
باشید که objcopy
باید
بتواند یک
فایل
کاملاً
پیوندخورده
(fully linked) را بین هر
دو قالبی
کپی کند. با
این حال،
کپی کردن یک
فایل شیء
بازتخصیصپذیر
(relocatable) بین هر دو
قالبی ممکن
است مطابق
انتظار عمل
نکند.
objcopy برای انجام تبدیلهای خود فایلهای موقت ایجاد کرده و پس از اتمام کار آنها را حذف میکند. objcopy از BFD برای انجام تمام کارهای تبدیل استفاده میکند؛ این ابزار به تمام قالبهای شرحدادهشده در BFD دسترسی دارد و بنابراین میتواند بیشتر قالبها را بدون نیاز به مشخص کردن صریح، شناسایی کند.
objcopy میتواند برای تولید S-recordها با استفاده از یک هدف خروجیِ srec (برای مثال استفاده از -O srec) به کار رود.
objcopy میتواند برای تولید یک فایل باینری خام با استفاده از هدف خروجیِ binary (برای مثال استفاده از -O binary) به کار رود. هنگامی که objcopy یک فایل باینری خام تولید میکند، اساساً یک رونوشت حافظه (memory dump) از محتویات فایل شیء ورودی ایجاد خواهد کرد. تمامی نمادها و اطلاعات جابهجایی (relocation) دور ریخته خواهند شد. رونوشت حافظه از نشانی بارگذاری پایینترین بخش (section) کپیشده در فایل خروجی آغاز خواهد شد.
هنگام تولید یک S-record یا یک فایل باینری خام، استفاده از -S برای حذف بخشهای حاوی اطلاعات اشکالزدایی (debugging) میتواند مفید باشد. در برخی موارد، -R برای حذف بخشهایی که حاوی اطلاعات غیرضروری برای فایل باینری هستند سودمند خواهد بود.
توجه: objcopy قادر به تغییر ترتیب بایتها (endianness) در فایلهای ورودی خود نیست. اگر قالب ورودی ترتیب بایتی داشته باشد (برخی قالبها ندارند)، objcopy فقط میتواند ورودیها را به قالبهایی کپی کند که همان ترتیب بایت را دارند یا اصلاً ترتیب بایت ندارند (مانند srec). (با این حال، گزینهٔ --reverse-bytes را ببینید.)
گزینهها (OPTIONS)
- infile
- outfile
- بهترتیب فایلهای ورودی و خروجی. اگر outfile را مشخص نکنید، objcopy یک فایل موقت ایجاد کرده و با تغییر نام مخرب، آن را با نام infile جایگزین میکند.
- -I bfdname
- --input-target=bfdname
- قالب شیء فایل مبدأ را بهجای تلاش برای استنتاج آن، bfdname در نظر میگیرد.
- -O bfdname
- --output-target=bfdname
- فایل خروجی را با استفاده از قالب شیء bfdname مینویسد.
- -F bfdname
- --target=bfdname
- از bfdname بهعنوان قالب شیء هم برای فایل ورودی و هم برای فایل خروجی استفاده میکند؛ یعنی دادهها را بدون هیچ تبدیلی صرفاً از مبدأ به مقصد منتقل میکند.
- -B bfdarch
- --binary-architecture=bfdarch
- هنگام تبدیل یک فایل ورودیِ بدون معماری به یک فایل شیء مفید است. در این حالت، معماری خروجی میتواند روی bfdarch تنظیم شود. اگر فایل ورودی معماری شناختهشدهای داشته باشد، این گزینه نادیده گرفته میشود. شما میتوانید با ارجاع به نمادهای ویژهای که در طول فرایند تبدیل ایجاد میشوند، در داخل یک برنامه به این دادههای باینری دسترسی پیدا کنید. این نمادها _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
- اطلاعات جابهجایی و نمادها را از فایل مبدأ کپی نمیکند. همچنین بخشهای اشکالزدایی را حذف میکند..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
- یک نماد سراسری یا ضعیف به نام symbolname را به یک نماد محلی تبدیل میکند تا از بیرون قابل مشاهده نباشد. این گزینه میتواند بیش از یک بار مشخص شود. توجه - نمادهای یکتا (unique) تبدیل نمیشوند.
- -W symbolname
- --weaken-symbol=symbolname
- نماد symbolname را ضعیف (weak) میکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --binary-symbol-prefix=string
- هنگامی که
با --input-target=binary
استفاده
میشود، string
را به عنوان
نام پایه
برای
نمادهای
تولیدشده
برای فایل
ورودی
تنظیم
میکند. این
نمادها
عبارتند از:
<string>_start <string>_end <string>_size
بهطور پیشفرض، گرداننده ورودی دودویی نام پیشوند نماد را از نسخه درهمریخته (mangled) نام فایل ورودی و پیشوند _binary مشتق میکند. این گزینه امکان مشخص کردن صریح آن را فراهم میسازد.
- --globalize-symbol=symbolname
- به نماد symbolname حوزه سراسری میدهد تا در خارج از فایلی که در آن تعریف شده است قابل مشاهده باشد. این گزینه میتواند بیش از یک بار مشخص شود. توجه: این گزینه نمیتواند همراه با گزینههای -G یا --keep-global-symbol استفاده شود.
- -w
- --wildcard
- استفاده از
عبارات
باقاعده را
در 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" استفاده میشود. توجه داشته باشید که objcopy در صورتی که گزینه --byte را نیز تعیین نکرده باشید، خطا خواهد گرفت.
عرض پیشفرض درهمبافی 4 است؛ بنابراین با تنظیم --byte روی 0، objcopy نخستین بایت از هر چهار بایت را از ورودی به خروجی کپی خواهد کرد.
- --interleave-width=width
- هنگامی که
همراه با
گزینه --interleave
استفاده
شود، هر بار
width بایت کپی
میکند.
آغاز
محدوده
بایتهای
مورد کپی با
گزینه --byte و
اندازه
محدوده با
گزینه --interleave
تعیین
میشود.
مقدار پیشفرض برای این گزینه 1 است. مجموع مقدار width و مقدار byte تعیینشده توسط گزینه --byte نباید از عرض درهمبافی تعیینشده توسط گزینه --interleave تجاوز کند.
این گزینه میتواند برای ساخت ایمیجها برای دو حافظه فلش ۱۶ بیتی درهمبافته در یک گذرگاه ۳۲ بیتی، با ارسال -b 0 -i 4 --interleave-width=2 و -b 2 -i 4 --interleave-width=2 به دو دستور objcopy استفاده شود. اگر ورودی '12345678' باشد، خروجیها به ترتیب '1256' و '3478' خواهند بود.
- -p
- --preserve-dates
- تاریخهای
دسترسی و
تغییر فایل
خروجی را
مشابه
تاریخهای
فایل ورودی
تنظیم
میکند.
این گزینه همچنین تاریخی را که در سرآیند یک فایل با قالب PE ذخیره شده است کپی میکند، مگر اینکه متغیر محیطی SOURCE_DATE_EPOCH تعریف شده باشد. در صورت تعریف، این متغیر به عنوان تاریخ ذخیرهشده در سرآیند استفاده میشود که به صورت تعداد ثانیههای سپریشده از مبدأ یونیکس (Unix epoch) تفسیر خواهد شد.
- -D
- --enable-deterministic-archives
- در حالت deterministic
(قطعی) عمل
میکند.
هنگام کپی
کردن اعضای
آرشیو و
نوشتن
نمایهٔ
آرشیو،
برای UIDها،
GIDها و
برچسبهای
زمانی از
صفر
استفاده
میکند و
برای همهٔ
فایلها
حالتهای
فایل (file modes)
یکسانی را
به کار
میبرد.
اگر binutils با --enable-deterministic-archives پیکربندی شده باشد، این حالت بهطور پیشفرض فعال است. میتوان آن را با گزینهٔ -U در زیر غیرفعال کرد.
- -U
- --disable-deterministic-archives
- در حالت deterministic
عمل
نمیکند.
این برعکس
گزینهٔ -D
در بالا
است: هنگام
کپی کردن
اعضای
آرشیو و
نوشتن
نمایهٔ
آرشیو، از
مقادیر
واقعی UID، GID،
برچسب
زمانی و
حالت فایل
آنها
استفاده
میکند.
این حالت پیشفرض است مگر اینکه binutils با --enable-deterministic-archives پیکربندی شده باشد.
- --debugging
- در صورت امکان، اطلاعات اشکالزدایی را تبدیل میکند. این حالت پیشفرض نیست زیرا تنها قالبهای اشکالزدایی خاصی پشتیبانی میشوند، و فرایند تبدیل میتواند زمانبر باشد.
- --gap-fill val
- شکافهای بین بخشها را با val پر میکند. این عملیات بر آدرس بارگذاری (LMA) بخشها اعمال میشود. این کار با افزایش اندازهٔ بخشی که آدرس پایینتری دارد و پر کردن فضای خالی ایجادشده با val انجام میپذیرد.
- --pad-to address
- فایل خروجی را تا آدرس بارگذاری address پد (pad) میکند. این کار با افزایش اندازهٔ آخرین بخش انجام میشود. فضای اضافی با مقدار مشخصشده توسط --gap-fill (پیشفرض صفر) پر میشود.
- --set-start val
- آدرس شروع (که به عنوان آدرس نقطهٔ ورود یا entry address نیز شناخته میشود) فایل جدید را روی val تنظیم میکند. همهٔ قالبهای فایل شیء (object file) از تنظیم آدرس شروع پشتیبانی نمیکنند.
- --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 بدهید..IP "--add-symbol name=[section:]value[,flags]" 4 افزودن یک نماد جدید با نام name هنگام رونوشت فایل. این گزینه میتواند چندین بار مشخص شود. اگر section مشخص شده باشد، نماد مرتبط با آن بخش و به صورت نسبی با آن خواهد بود، در غیر این صورت یک نماد ABS خواهد بود. مشخص کردن یک بخش تعریفنشده منجر به یک خطای مهلک خواهد شد. هیچ بررسی روی مقدار صورت نمیگیرد و دقیقاً همانگونه که مشخص شده دریافت میشود. پرچمهای نماد میتوانند مشخص شوند و همه پرچمها برای همه قالبهای فایل شیء معنادار نخواهند بود. بهطور پیشفرض، نماد سراسری خواهد بود. پرچم ویژه 'before=othersym' نماد جدید را پیش از othersym مشخصشده درج میکند، در غیر این صورت نماد(ها) به ترتیب ظاهر شدن در انتهای جدول نمادها افزوده خواهند شد.
- --rename-section oldname=newname[,flags]
- تغییر نام
یک بخش از oldname
به newname،
همراه با
امکان
تغییر
پرچمهای
بخش به flags در
این فرایند
به صورت
اختیاری.
این کار
نسبت به
استفاده از
یک اسکریپت
پیونددهنده
برای تغییر
نام این
مزیت را
دارد که
خروجی به
صورت یک
فایل شیء
باقی
میماند و
تبدیل به یک
فایل
اجرایی
پیوندیافته
نمیشود.
این گزینه
همان
مجموعه
پرچمهای
گزینه --set-section-flags
را
میپذیرد.
این گزینه بهویژه زمانی سودمند است که قالب ورودی باینری باشد، چرا که این قالب همواره بخشی به نام .data ایجاد میکند. برای نمونه، اگر میخواستید بهجای آن بخشی به نام .rodata حاوی دادههای باینری ایجاد کنید، میتوانید از خط فرمان زیر برای رسیدن به این هدف استفاده کنید:
objcopy -I binary -O <output_format> -B <architecture> \ --rename-section .data=.rodata,alloc,load,readonly,data,contents \ <input_binary_file> <output_object_file>
- --long-section-names {enable,disable,keep}
- مدیریت نامهای طولانی بخشها را هنگام پردازش قالبهای شیء "COFF" و "PE-COFF" کنترل میکند. رفتار پیشفرض، یعنی keep، حفظ نامهای طولانی بخشها در صورت وجود در فایل ورودی است. گزینههای enable و disable استفاده از نامهای طولانی بخشها را در شیء خروجی به صورت اجباری فعال یا غیرفعال میکنند؛ هنگامی که disable اعمال شود، هر نام طولانی بخش در شیء ورودی کوتاه خواهد شد. گزینه enable تنها در صورتی نامهای طولانی بخش را صادر میکند که در ورودیها وجود داشته باشند؛ این رفتار تا حد زیادی مانند keep است، اما این موضوع که آیا گزینه enable ممکن است ایجاد یک جدول رشته خالی را در فایل خروجی تحمیل کند یا خیر، تعریفنشده رها شده است.
- --change-leading-char
- برخی از قالبهای فایل شیء از نویسههای خاصی در آغاز نمادها استفاده میکنند. متداولترین نویسه از این دست زیرخط است که کامپایلرها اغلب آن را پیش از هر نماد میافزایند. این گزینه به 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 (یا Srecord) تولیدشده را روی ival تنظیم میکند. این طول شامل فیلدهای نشانی، داده و crc میشود.
- --srec-forceS3
- تنها برای خروجی srec معنادار است. از تولید رکوردهای S1/S2 جلوگیری کرده و تنها قالب رکورد S3 را ایجاد میکند.
- --redefine-sym old=new
- نام نماد old را به new تغییر میدهد. این قابلیت زمانی مفید است که بخواهید دو شیء را که کد منبع آنها را ندارید به یکدیگر پیوند دهید و تداخل نام وجود داشته باشد.
- --redefine-syms=filename
- گزینه --redefine-sym را روی هر جفتنماد «old new» فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر سطر آن یک جفتنماد قرار دارد. توضیحات درون سطرها میتوانند با نویسه هش آغاز شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --weaken
- تمام نمادهای سراسری موجود در فایل را به نماد ضعیف (weak) تبدیل میکند. این ویژگی هنگام ساخت شیئی که قرار است با استفاده از گزینه -R پیونددهنده با اشیاء دیگر پیوند داده شود، میتواند مفید باشد. این گزینه تنها زمانی کارآمد است که از قالب فایل شیئی استفاده شود که از نمادهای ضعیف پشتیبانی میکند.
- --keep-symbols=filename
- گزینه --keep-symbol را روی هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر سطر آن یک نام نماد قرار دارد. توضیحات درون سطرها میتوانند با نویسه هش معرفی شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-symbols=filename
- گزینه --strip-symbol را روی هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر سطر آن یک نام نماد قرار دارد. توضیحات درون سطرها میتوانند با نویسه هش معرفی شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-unneeded-symbols=filename
- گزینه --strip-unneeded-symbol را روی هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر سطر آن یک نام نماد قرار دارد. توضیحات درون سطرها میتوانند با نویسه هش معرفی شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --keep-global-symbols=filename
- گزینه --keep-global-symbol را روی هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر سطر آن یک نام نماد قرار دارد. توضیحات درون سطرها میتوانند با نویسه هش معرفی شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --localize-symbols=filename
- گزینه --localize-symbol را روی هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر سطر آن یک نام نماد قرار دارد. توضیحات درون سطرها میتوانند با نویسه هش معرفی شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --globalize-symbols=filename
- گزینه --globalize-symbol را روی هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر سطر آن یک نام نماد قرار دارد. توضیحات درون سطرها میتوانند با نویسه هش معرفی شوند. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه نمیتواند در ترکیب با گزینههای -G یا --keep-global-symbol استفاده شود.
- --weaken-symbols=filename
- گزینه --weaken-symbol را روی هر نماد فهرستشده در فایل filename اعمال میکند. filename صرفاً یک فایل متنی ساده است که در هر سطر آن یک نام نماد قرار دارد. توضیحات درون سطرها میتوانند با نویسه هش معرفی شوند. این گزینه میتواند بیش از یک بار مشخص شود.
- --alt-machine-code=index
- اگر معماری خروجی دارای کدهای ماشین جایگزین باشد، بهجای کد پیشفرض از کد شماره indexام استفاده میکند. این ویژگی زمانی مفید است که برای یک ماشین یک کد رسمی اختصاص یابد و زنجیرهابزار کد جدید را به کار گیرد، اما برنامههای دیگر همچنان به استفاده از کد اصلی وابسته باشند. برای معماریهای مبتنی بر ELF، اگر جایگزین شماره index وجود نداشته باشد، مقدار به عنوان یک عدد مطلق در نظر گرفته میشود تا در فیلد e_machine سرآیند ELF ذخیره گردد.
- --writable-text
- بخش متن (text) خروجی را به عنوان قابل نوشتن نشانهگذاری میکند. این گزینه برای همه قالبهای فایل شیء معنادار نیست.
- --readonly-text
- بخش متن (text) خروجی را در برابر نوشتن محافظت میکند. این گزینه برای همه قالبهای فایل شیء معنادار نیست.
- --pure
- فایل خروجی را به عنوان صفحهبندی بر حسب تقاضا (demand paged) نشانهگذاری میکند. این گزینه برای همه قالبهای فایل شیء معنادار نیست.
- --impure
- فایل خروجی را به عنوان ناخالص (impure) نشانهگذاری میکند. این گزینه برای همه قالبهای فایل شیء معنادار نیست..IP --prefix-symbols=string 4 افزودن پیشوند string به تمام نمادها در فایل خروجی.
- --prefix-sections=string
- افزودن پیشوند string به نام تمام بخشها در فایل خروجی.
- --prefix-alloc-sections=string
- افزودن پیشوند string به نام تمام بخشهای تخصیصیافته در فایل خروجی.
- --add-gnu-debuglink=path-to-file
- بخشی به نام
.gnu_debuglink ایجاد
میکند که
حاوی
ارجاعی به
path-to-file است و آن
را به فایل
خروجی
اضافه
میکند.
نکته: فایل
موجود در
path-to-file باید
وجود داشته
باشد. بخشی
از فرایند
افزودن بخش
.gnu_debuglink شامل
گنجاندن یک
چکسام از
محتویات
فایل
اطلاعات
اشکالزدایی
در این بخش
است.
اگر فایل اطلاعات اشکالزدایی در یک مکان ساخته شده اما قرار است بعداً در مکان متفاوتی نصب شود، از مسیر مکان نصبشده استفاده نکنید. گزینه --add-gnu-debuglink ناموفق خواهد بود زیرا فایل نصبشده هنوز وجود ندارد. در عوض فایل اطلاعات اشکالزدایی را در دایرکتوری جاری قرار داده و از گزینه --add-gnu-debuglink بدون مشخص کردن هیچ دایرکتوری استفاده کنید، مانند این:
objcopy --add-gnu-debuglink=foo.debug
هنگام اشکالزدایی، اشکالزدا تلاش میکند تا فایل جداگانه اطلاعات اشکالزدایی را در مجموعهای از مکانهای شناختهشده جستجو کند. مجموعه دقیق این مکانها بسته به توزیع مورد استفاده متفاوت است، اما معمولاً شامل موارد زیر است:
- همان دایرکتوری حاوی فایل اجرایی.
- یک زیردایرکتوری از دایرکتوری حاوی فایل اجرایی با نام .debug.
- یک دایرکتوری سراسری اشکالزدایی مانند /usr/lib/debug.
تا زمانی که فایل اطلاعات اشکالزدایی پیش از اجرای اشکالزدا در یکی از این مکانها نصب شده باشد، همهچیز باید به درستی کار کند.
- --keep-section-symbols
- هنگام پیراستن یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، تمام نمادهایی که نام بخشها را مشخص میکنند و در غیر این صورت حذف میشدند را حفظ میکند.
- --keep-file-symbols
- هنگام پیراستن یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، تمام نمادهایی که نام فایلهای منبع را مشخص میکنند و در غیر این صورت حذف میشدند را حفظ میکند.
- --only-keep-debug
- پیراستن
فایل، با
حذف محتوای
تمام
بخشهایی
که توسط --strip-debug
پیراسته
نمیشوند و
دستنخورده
باقی
گذاشتن
بخشهای
اشکالزدایی.
در
فایلهای
ELF، این کار
تمام
بخشهای note
را در خروجی
حفظ میکند.
نکته - سرایندهای بخش مربوط به بخشهای پیراستهشده، شامل اندازه آنها، حفظ میشوند، اما محتوای بخش دور ریخته میشود. سرایندهای بخش به این دلیل حفظ میشوند تا ابزارهای دیگر بتوانند فایل debuginfo را با فایل اجرایی واقعی تطبیق دهند، حتی اگر آن فایل اجرایی به فضای آدرس متفاوتی بازنشانی شده باشد.
هدف این است که این گزینه در کنار --add-gnu-debuglink برای ایجاد یک فایل اجرایی دو بخشی استفاده شود: یکی باینری پیراستهشده که فضای کمتری را در RAM و توزیع اشغال میکند و دومی فایل اطلاعات اشکالزدایی که تنها در صورت نیاز به قابلیتهای اشکالزدایی لازم است. روال پیشنهادی برای ایجاد این فایلها به شرح زیر است:
- 1.
- فایل اجرایی را به صورت عادی پیوند دهید. با فرض اینکه نام آن "foo" باشد، سپس...
- 2.
- دستور "objcopy --only-keep-debug foo foo.dbg" را برای ایجاد فایلی حاوی اطلاعات اشکالزدایی اجرا کنید.
- 3.
- دستور "objcopy --strip-debug foo" را برای ایجاد یک فایل اجرایی پیراستهشده اجرا کنید.
- 4.
- دستور "objcopy --add-gnu-debuglink=foo.dbg foo" را برای افزودن پیوندی به اطلاعات اشکالزدایی در فایل اجرایی پیراستهشده اجرا کنید.
نکته---انتخاب ".dbg" به عنوان پسوند فایل اطلاعات اشکالزدایی اختیاری است. همچنین مرحله "--only-keep-debug" اختیاری است. به جای آن میتوانید این کار را انجام دهید:
- 1.
- فایل اجرایی را به صورت عادی پیوند دهید.
- 2.
- از "foo" در "foo.full" رونوشت بگیرید.
- 3.
- دستور "objcopy --strip-debug foo" را اجرا کنید.
- 4.
- دستور "objcopy --add-gnu-debuglink=foo.full foo" را اجرا کنید.
یعنی فایلی که توسط --add-gnu-debuglink به آن اشاره میشود میتواند همان فایل اجرایی کامل باشد. لزومی ندارد فایلی باشد که توسط گزینه --only-keep-debug ایجاد شده است.
نکته---این گزینه تنها برای استفاده روی فایلهای کاملاً پیوندخورده در نظر گرفته شده است. استفاده از آن روی فایلهای شیء که ممکن است اطلاعات اشکالزدایی در آنها ناقص باشد بیمعنی است. علاوه بر این، قابلیت gnu_debuglink در حال حاضر تنها از وجود یک نام فایل حاوی اطلاعات اشکالزدایی پشتیبانی میکند، نه چند نام فایل به ازای هر فایل شیء.
- --strip-dwo
- حذف محتویات تمام بخشهای DWARF .dwo، در حالی که باقی بخشهای اشکالزدایی و تمام نمادها دستنخورده باقی میمانند. این گزینه برای استفاده توسط کامپایلر به عنوان بخشی از گزینه -gsplit-dwarf در نظر گرفته شده است، که اطلاعات اشکالزدایی را بین فایل .o و یک فایل جداگانه .dwo تقسیم میکند. کامپایلر تمام اطلاعات اشکالزدایی را در همان فایل تولید میکند، سپس از گزینه --extract-dwo برای کپی کردن بخشهای .dwo به فایل .dwo استفاده کرده، و سپس از گزینه --strip-dwo برای حذف آن بخشها از فایل اصلی .o بهره میگیرد.
- --extract-dwo
- استخراج محتویات تمام بخشهای DWARF .dwo. برای اطلاعات بیشتر گزینه --strip-dwo را ببینید.
- --file-alignment num
- تعیین همترازی فایل. بخشهای موجود در فایل همواره در آفستهایی از فایل آغاز میشوند که مضربی از این عدد باشند. پیشفرض این مقدار ۵۱۲ است. [این گزینه مختص به هدفهای PE است.]
- --heap reserve
- --heap reserve,commit
- تعیین تعداد بایتهای حافظه برای رزرو (و در صورت تمایل commit کردن) جهت استفاده به عنوان هیپ برای این برنامه. [این گزینه مختص به هدفهای PE است.]
- --image-base value
- استفاده از value به عنوان آدرس پایه برنامه یا dll شما. این پایینترین مکان حافظه است که هنگام بارگذاری برنامه یا dll شما استفاده خواهد شد. برای کاهش نیاز به بازنشانی و بهبود عملکرد 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 کردن) جهت استفاده به عنوان پشته برای این برنامه. [این گزینه مختص به هدفهای PE است.]
- --subsystem which
- --subsystem which:major
- --subsystem which:major.minor
- زیرسیستمی را مشخص میکند که برنامهٔ شما تحت آن اجرا خواهد شد. مقادیر مجاز برای which عبارتند از "native"، "windows"، "console"، "posix"، "efi-app"، "efi-bsd"، "efi-rtd"، "sal-rtd" و "xbox". همچنین میتوانید بهصورت اختیاری نسخهٔ زیرسیستم را نیز تنظیم کنید. مقادیر عددی نیز برای which پذیرفته میشوند. [این گزینه مخصوص هدفهای PE است.]
- --extract-symbol
- پرچمهای بخشها و نمادهای فایل را نگه میدارد اما تمام دادههای بخشها را حذف میکند. به طور مشخص، این گزینه:
- محتوای تمامی بخشها را حذف میکند.
- اندازهٔ هر بخش را به صفر تنظیم میکند.
- نشانی آغازین فایل را به صفر تنظیم میکند.
این گزینه برای ساخت یک فایل .sym جهت کرنل VxWorks استفاده میشود. همچنین میتواند روش مفیدی برای کاهش اندازهٔ یک فایل ورودی پیونددهندهٔ --just-symbols باشد.
- --compress-debug-sections
- بخشهای اشکالزدایی DWARF را با استفاده از zlib به همراه SHF_COMPRESSED از 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 با نویسهٔ فاصله جدا میشوند. یک نویسهٔ فاصله میتواند با قرار دادن کل گزینه درون نقلقول تکی یا دوتایی در آن گنجانده شود. هر نویسهای (از جمله ممیز وارونه) را میتوان با افزودن پیشوند ممیز وارونه به نویسه مورد نظر، درج کرد. خود file میتواند شامل گزینههای اضافی @file دیگری باشد؛ چنین گزینههایی بهصورت بازگشتی پردازش خواهند شد..SH "همچنین ببینید (SEE ALSO)" ld(1)، objdump(1) و مدخلهای Info برای binutils.
کپیرایت و تکثیر (COPYRIGHT)
Copyright (c) 1991-2026 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-08-03 | binutils-2.47 |