| 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
باید
بتواند یک
فایل
کاملاً
پیوند
خورده (fully linked) را
میان هر دو
قالبی کپی
کند. با این
حال، کپی
کردن یک
فایل شیء با
قابلیت
بازنشانی
(relocatable) میان هر
دو قالبی
ممکن است
مطابق
انتظار کار
نکند.
دستور objcopy برای انجام تبدیلهای خود فایلهای موقتی ایجاد کرده و پس از آن آنها را حذف میکند. objcopy از BFD برای انجام تمام کارهای تبدیل خود بهره میبرد؛ این ابزار به تمام قالبهای توصیفشده در BFD دسترسی دارد و از این رو قادر است بیشتر قالبها را بدون نیاز به مشخص کردن صریح تشخیص دهد.
میتوان از objcopy برای تولید رکوردهای S (S-records) با استفاده از یک هدف خروجیِ srec استفاده کرد (برای مثال، با استفاده از -O srec).
میتوان از objcopy برای تولید یک فایل باینری خام با استفاده از یک هدف خروجیِ binary استفاده کرد (برای مثال، با استفاده از -O binary). هنگامی که objcopy یک فایل باینری خام تولید میکند، اساساً یک رونوشت حافظه (memory dump) از محتویات فایل شیء ورودی ایجاد خواهد کرد. تمامی نمادها و اطلاعات بازنشانی دور ریخته خواهند شد. رونوشت حافظه از آدرس بارگذاریِ پایینترین بخشی که در فایل خروجی کپی شده است، آغاز میشود.
هنگام تولید یک 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
- سرآیندهای بخش (section headers) را حذف میکند. این گزینه مختص فایلهای ELF است. مستلزم اعمال گزینههای --strip-all و --merge-notes است.
- -S
- --strip-all
- اطلاعات بازنشانی و نمادها را از فایل مبدأ کپی نمیکند. همچنین بخشهای اشکالزدایی (debug) را حذف میکند..IP -g 4
- --strip-debug
- نمادها یا بخشهای اشکالزدایی را از فایل مبدأ کپی نمیکند.
- --strip-unneeded
- علاوه بر نمادها و بخشهای اشکالزدایی که توسط --strip-debug حذف میشوند، تمام نمادهایی را که برای پردازش بازآرایی (relocation) مورد نیاز نیستند حذف میکند.
- -K symbolname
- --keep-symbol=symbolname
- هنگام پاکسازی نمادها، نماد symbolname را حتی اگر در حالت عادی حذف میشد، نگه میدارد. این گزینه میتواند بیش از یک بار مشخص شود.
- -N symbolname
- --strip-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --strip-unneeded-symbol=symbolname
- نماد symbolname را از فایل مبدأ کپی نمیکند، مگر اینکه برای یک بازآرایی (relocation) مورد نیاز باشد. این گزینه میتواند بیش از یک بار مشخص شود.
- -G symbolname
- --keep-global-symbol=symbolname
- تنها نماد symbolname را سراسری (global) نگه میدارد. سایر نمادها را برای فایل محلی (local) میکند، به طوری که از خارج قابل مشاهده نباشند. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه نمیتواند همراه با گزینههای --globalize-symbol یا --globalize-symbols استفاده شود.
- --localize-hidden
- در یک شیء ELF، تمام نمادهایی را که دید (visibility) پنهان یا داخلی دارند به عنوان محلی علامتگذاری میکند. این گزینه علاوهبر گزینههای محلیسازی مختص هر نماد مانند -L اعمال میشود.
- -L symbolname
- --localize-symbol=symbolname
- یک نماد سراسری یا ضعیف (weak) به نام symbolname را به یک نماد محلی تبدیل میکند، به طوری که از خارج قابل مشاهده نباشد. این گزینه میتواند بیش از یک بار مشخص شود. نکته - نمادهای منحصربهفرد (unique) تبدیل نمیشوند.
- -W symbolname
- --weaken-symbol=symbolname
- نماد symbolname را ضعیف (weak) میکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --globalize-symbol=symbolname
- به نماد symbolname حوزهٔ دید سراسری میدهد تا در خارج از فایلی که در آن تعریف شده قابل مشاهده باشد. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه نمیتواند همراه با گزینههای -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
- اگر درهمبافی از طریق گزینهٔ --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
- در حالت deterministic
عمل نکنید.
این برعکس
گزینهٔ -D
در بالا
است: هنگام
رونوشت
اعضای
آرشیو و
نوشتن
نمایهٔ
آرشیو، از
مقادیر
واقعی UID، GID،
مهرزمانی
(timestamp) و
حالتهای
فایل مربوط
به آنها
استفاده
کنید.
این حالت پیشفرض است مگر اینکه binutils با گزینهٔ --enable-deterministic-archives پیکربندی شده باشد.
- --debugging
- در صورت امکان، اطلاعات اشکالزدایی (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 binary) میتواند خطرناک باشد زیرا ممکن است کدهایی وجود داشته باشند که انتظار دارند بخشها در نشانی قدیمیشان قرار گیرند.
- --change-warnings
- --adjust-warnings
- اگر از --change-section-address یا --change-section-lma یا --change-section-vma استفاده شود، و الگوی بخش با هیچ بخشی مطابقت نداشته باشد، هشداری صادر کنید. این حالت پیشفرض است.
- --no-change-warnings
- --no-adjust-warnings
- در صورت استفاده از --change-section-address یا --adjust-section-lma یا --adjust-section-vma، حتی اگر الگوی بخش با هیچ بخشی مطابقت نداشت، هشداری صادر نکنید.
- --set-section-flags sectionpattern=flags
- تنظیم پرچمها برای هر بخشی که با sectionpattern مطابقت دارد. آرگومان flags رشتهای از نام پرچمها است که با ویرگول از هم جدا شدهاند. نامهای شناختهشده عبارتاند از: alloc، contents، load، noload، readonly، code، data، rom، exclude، share، debug و large. میتوانید پرچم contents را برای بخشی که محتوایی ندارد تنظیم کنید، اما پاک کردن پرچم contents برای بخشی که دارای محتوا است معنایی ندارد--بهجای این کار، بهسادگی بخش را حذف کنید. همهٔ پرچمها برای تمام قالبهای فایل شیء معنادار نیستند. بهویژه پرچم share فقط برای فایلهای با قالب COFF معنا دارد و برای فایلهای با قالب ELF کاربردی ندارد. پرچم ویژهٔ ELF x86-64 یعنی large متناظر با SHF_X86_64_LARGE است.
- --set-section-alignment sectionpattern=align
- تنظیم
همترازی
برای هر
بخشی که با
sectionpattern مطابقت
دارد. align
ترازبندی
را بر حسب
بایت مشخص
میکند و
باید توانی
از دو باشد،
یعنی ۱، ۲،
۴، ۸...
نکته - تنظیم ترازبندی یک بخش بهطور خودکار نشانیهای LMA یا VMA آن را تراز نمیکند. اگر نیاز به تغییر آنها نیز باشد، باید از گزینههای --change-section-lma و/یا --change-section-vma استفاده شود. همچنین توجه داشته باشید که تغییر VMAها میتواند در باینریهای کاملاً پیوندیافته مشکلاتی ایجاد کند، زیرا ممکن است کدهایی وجود داشته باشند که انتظار دارند محتویات بخشها در نشانی قدیمیشان قرار گیرد.
- --add-section sectionname=filename
- افزودن یک بخش جدید به نام sectionname هنگام رونوشت فایل. محتویات بخش جدید از فایل filename گرفته میشود. اندازهٔ بخش برابر با اندازهٔ فایل خواهد بود. این گزینه تنها در قالبهای فایلی کار میکند که میتوانند از بخشهایی با نامهای دلخواه پشتیبانی کنند. نکته - ممکن است برای تعیین ویژگیهای بخش تازهایجادشده نیاز به استفاده از گزینهٔ --set-section-flags باشد.
- --dump-section sectionname=filename
- قرار دادن محتویات بخش با نام sectionname درون فایل filename، بهگونهای که هر محتوایی که قبلاً در آنجا بوده بازنویسی شود. این گزینه برعکس --add-section است. این گزینه مشابه گزینهٔ --only-section است، با این تفاوت که فایل قالببندیشدهای ایجاد نمیکند، بلکه تنها محتویات را بهصورت دادههای باینری خام بدون اِعمال هیچگونه بازآرایی (relocations) استخراج و ذخیره (dump) میکند. این گزینه را میتوان بیش از یک بار مشخص کرد.
- --update-section sectionname=filename
- جایگزینی
محتویات
موجود بخشی
به نام sectionname
با محتویات
فایل filename.
اندازهٔ
بخش متناسب
با اندازهٔ
فایل تنظیم
خواهد شد.
پرچمهای
بخش برای
sectionname بدون
تغییر باقی
خواهند
ماند. برای
فایلهای
با قالب ELF
نگاشت بخش
به قطعه (segment)
نیز بدون
تغییر باقی
خواهد
ماند، امری
که با
استفاده از
--remove-section و سپس
--add-section
امکانپذیر
نیست. این
گزینه را
میتوان
بیش از یک
بار مشخص
کرد.
نکته - میتوان از --rename-section و --update-section بهصورت همزمان در یک خط فرمان برای بهروزرسانی و تغییر نام یک بخش استفاده کرد. در این حالت، نام اصلی بخش را به --update-section، و نام اصلی و جدید بخش را به --rename-section ارسال کنید.
- --add-symbol name=[section:]value[,flags]
- افزودن یک
نماد جدید
به نام name
هنگام
رونوشت
فایل. این
گزینه را
میتوان
چندین بار
مشخص کرد.
اگر section داده
شده باشد،
نماد با آن
بخش مرتبط و
نسبت به آن
نسبی خواهد
بود، در غیر
این صورت یک
نماد ABS (مطلق)
خواهد بود.
مشخص کردن
یک بخش
تعریفنشده
منجر به
خطای
مرگبار
خواهد شد.
هیچ بررسی
روی مقدار
انجام
نمیشود و
همانطور
که مشخص شده
دریافت
خواهد شد.
پرچمهای
نماد را
میتوان
مشخص کرد
اما همهٔ
پرچمها
برای تمام
قالبهای
فایل شیء
معنادار
نخواهند
بود. بهطور
پیشفرض،
نماد
سراسری (global)
خواهد بود.
پرچم ویژهٔ
'before=othersym' نماد
جدید را پیش
از نماد
مشخصشده
othersym درج
میکند، در
غیر این
صورت
نماد(ها) به
ترتیب ظهور
در انتهای
جدول
نمادها
اضافه
خواهند شد..IP
"--rename-section
oldname=newname[,flags]" 4
تغییر نام
یک بخش از oldname
به newname، و
بهطور
اختیاری
تغییر
پرچمهای
بخش به flags در
حین این
فرایند. این
گزینه نسبت
به استفاده
از اسکریپت
پیونددهنده
برای تغییر
نام، این
مزیت را
دارد که
خروجی
همچنان
بهصورت یک
فایل شیء (object file)
باقی
میماند و
به یک فایل
اجرایی
پیوندیافته
تبدیل
نمیشود.
این گزینه
همان
مجموعه
پرچمهای
گزینهٔ
--set-section-flags را
میپذیرد.
این گزینه بهویژه زمانی مفید است که قالب ورودی دودویی (binary) باشد، زیرا در این حالت همیشه بخشی به نام .data ایجاد میشود. اگر برای مثال میخواستید بهجای آن بخشی به نام .rodata حاوی دادههای باینری بسازید، میتوانید از خط فرمان زیر برای انجام آن استفاده کنید:
objcopy -I binary -O <output_format> -B <architecture> \ --rename-section .data=.rodata,alloc,load,readonly,data,contents \ <input_binary_file> <output_object_file>
- --long-section-names {enable,disable,keep}
- نحوهٔ مدیریت نامهای طولانی بخشها را هنگام پردازش قالبهای شیء "COFF" و "PE-COFF" کنترل میکند. رفتار پیشفرض، یعنی keep، حفظ نامهای طولانی بخشها در صورت وجود در فایل ورودی است. گزینههای enable و disable استفاده از نامهای طولانی بخش را در شیء خروجی بهصورت اجباری فعال یا غیرفعال میکنند؛ هنگامی که disable فعال باشد، هر نام بخش طولانی در شیء ورودی کوتاهسازی خواهد شد. گزینهٔ 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
- بخش متن خروجی را محافظتشده در برابر نوشتن (فقطخواندنی) میکند. این گزینه برای تمام قالبهای فایل شیء معنادار نیست.
- --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 شامل
گنجاندن یک
چکسام (checksum) از
محتویات
فایل
اطلاعات
خطایابی
درون این
بخش است.
اگر فایل اطلاعات خطایابی در یک مکان ساخته شده است اما قرار است بعداً در مکان متفاوتی نصب شود، از مسیر مکان نصب استفاده نکنید. گزینهٔ --add-gnu-debuglink با شکست مواجه خواهد شد زیرا فایل نصبشده هنوز وجود ندارد. در عوض فایل اطلاعات خطایابی را در دایرکتوری جاری قرار دهید و از گزینهٔ --add-gnu-debuglink بدون هیچ جزء دایرکتوری استفاده کنید، مانند این:
objcopy --add-gnu-debuglink=foo.debug
در زمان خطایابی، خطایاب تلاش میکند تا فایل جداگانهٔ اطلاعات خطایابی را در مجموعهای از مکانهای شناختهشده جستجو کند. مجموعهٔ دقیق این مکانها بسته به توزیعِ مورداستفاده متفاوت است، اما معمولاً شامل موارد زیر است:
- "* The same directory as the executable."
- "* A sub-directory of the directory containing the executable"
- به نام .debug
- "* A global debug directory such as /usr/lib/debug."
تا زمانی که فایل اطلاعات خطایابی پیش از اجرای خطایاب در یکی از این مکانها نصب شده باشد، همهچیز باید به درستی کار کند.
- --keep-section-symbols
- هنگام پیراستن یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، تمام نمادهایی که نام بخشها را مشخص میکنند نگه میدارد؛ نمادهایی که در غیر این صورت حذف (strip) میشدند.
- --keep-file-symbols
- هنگام پیراستن یک فایل، احتمالاً با --strip-debug یا --strip-unneeded، تمام نمادهایی که نام فایلهای منبع را مشخص میکنند نگه میدارد؛ نمادهایی که در غیر این صورت حذف میشدند.
- --only-keep-debug
- یک فایل را
میپیراید
و محتوای هر
بخشی را که
توسط --strip-debug
حذف نمیشد
پاک
میکند، در
حالی که
بخشهای
خطایابی را
دستنخورده
باقی
میگذارد.
در
فایلهای
ELF، این
گزینه تمام
بخشهای note
را در خروجی
حفظ میکند.
توجه - سرایندهای بخشهای پیراستهشده حفظ میشوند، از جمله اندازههای آنها، اما محتویات بخش دور ریخته میشود. سرایندهای بخش به این منظور حفظ میشوند تا سایر ابزارها بتوانند فایل debuginfo را با فایل اجرایی واقعی تطبیق دهند، حتی اگر آن فایل اجرایی به فضای نشانی متفاوتی بازآدرسدهی (relocate) شده باشد.
هدف این است که از این گزینه به همراه --add-gnu-debuglink برای ایجاد یک فایل اجرایی دو بخشی استفاده شود. یکی باینریِ پیراستهشده (stripped) که فضای کمتری در RAM و در توزیع اشغال میکند، و دومی فایل اطلاعات خطایابی که تنها در صورت نیاز به قابلیتهای خطایابی لازم است. روال پیشنهادی برای ایجاد این فایلها به شرح زیر است:
- 1.<Link the executable as normal. Assuming that it is called>
- "foo" باشد، سپس...
- 1.<Run "objcopy --only-keep-debug foo foo.dbg" to>
- ایجاد فایلی حاوی اطلاعات خطایابی.
- 1.<Run "objcopy --strip-debug foo" to create a>
- فایل اجرایی پیراستهشده.
- 1.<Run "objcopy --add-gnu-debuglink=foo.dbg foo">
- جهت افزودن پیوندی به اطلاعات خطایابی درون فایل اجرایی پیراستهشده.
توجه---انتخاب ".dbg" به عنوان پسوند برای فایل اطلاعات خطایابی اختیاری است. همچنین مرحلهٔ "--only-keep-debug" اختیاری است. میتوانید در عوض این کار را انجام دهید:
- 1.<Link the executable as normal.>
- 1.<Copy "foo" to "foo.full">
- 1.<Run "objcopy --strip-debug foo">
- 1.<Run "objcopy --add-gnu-debuglink=foo.full foo">
به این معنی که، فایل اشارهشده توسط --add-gnu-debuglink میتواند فایل اجرایی کامل باشد. نیازی نیست حتماً فایلی باشد که توسط سوییچ --only-keep-debug ایجاد شده است.
توجه---این سوییچ فقط برای استفاده روی فایلهای کاملاً پیوندخورده در نظر گرفته شده است. استفاده از آن روی فایلهای شیء که در آنها ممکن است اطلاعات خطایابی ناقص باشد، منطقی نیست. گذشته از این، قابلیت gnu_debuglink در حال حاضر تنها از وجود یک نام فایلِ حاوی اطلاعات خطایابی پشتیبانی میکند، نه چند نام فایل به ازای هر فایل شیء.
- --strip-dwo
- محتوای تمام بخشهای .dwo مربوط به DWARF را حذف میکند، و باقی بخشهای خطایابی و تمام نمادها را دستنخورده باقی میگذارد. این گزینه برای استفاده توسط کامپایلر به عنوان بخشی از گزینهٔ -gsplit-dwarf در نظر گرفته شده است، که اطلاعات خطایابی را بین فایل .o و یک فایل جداگانهٔ .dwo تقسیم میکند. کامپایلر تمام اطلاعات خطایابی را در همان فایل تولید میکند، سپس از گزینهٔ --extract-dwo برای رونوشت بخشهای .dwo به فایل .dwo استفاده میکند، و سپس از گزینهٔ --strip-dwo برای حذف آن بخشها از فایل اصلی .o بهره میگیرد.
- --extract-dwo
- محتوای تمام بخشهای .dwo مربوط به DWARF را استخراج میکند. برای اطلاعات بیشتر گزینهٔ --strip-dwo را ببینید.
- --file-alignment num
- همترازی فایل را مشخص میکند. بخشهای درون فایل همیشه از آفستهایی از فایل آغاز میشوند که مضربی از این عدد باشند. مقدار پیشفرض آن 512 است. [این گزینه مخصوص هدفهای PE است.]
- --heap reserve
- --heap reserve,commit
- تعداد بایتهای حافظه را برای رزرو (و در صورت تمایل تثبیت) جهت استفاده به عنوان هیپ برای این برنامه مشخص میکند. [این گزینه مخصوص هدفهای PE است.]
- --image-base value
- از value به عنوان نشانی پایه برای برنامه یا dll شما استفاده میکند. این پایینترین مکان حافظه است که هنگام بارگذاری برنامه یا dll شما استفاده خواهد شد. برای کاهش نیاز به بازآدرسدهی و بهبود عملکرد 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
- تعداد بایتهای حافظه را برای رزرو (و در صورت تمایل تثبیت) جهت استفاده به عنوان پشته برای این برنامه مشخص میکند. [این گزینه مخصوص هدفهای 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، این گزینهها کنترل میکنند که آیا نمادهای عمومی باید به نوع "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 |