| 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
از
کتابخانهٔ BFD
گنو برای
خواندن و
نوشتن
فایلهای
شیء
استفاده
میکند. این
ابزار
میتواند
فایل شیء
مقصد را در
قالبی
متفاوت از
فایل شیء
مبدأ
بنویسد.
رفتار دقیق
objcopy توسط
گزینههای
خط فرمان
کنترل
میشود.
توجه داشته
باشید که objcopy
باید
بتواند یک
فایل
کاملاً
پیوندیافته
(fully linked) را میان
هر دو قالبی
رونوشت کند.
با این حال،
رونوشت یک
فایل شیء
بازتعیینپذیر
(relocatable) میان هر
دو قالبی
ممکن است
مطابق
انتظار عمل
نکند.
objcopy برای انجام تبدیلهای خود فایلهای موقتی ایجاد کرده و پس از اتمام کار آنها را حذف میکند. objcopy برای تمامی کارهای تبدیل خود از BFD استفاده میکند؛ این ابزار به تمامی قالبهای شرحدادهشده در BFD دسترسی داشته و از این رو قادر است بیشتر قالبها را بدون نیاز به تصریح صریح، تشخیص دهد.
از objcopy میتوان با تعیین هدف خروجی srec (برای مثال با استفاده از -O srec) جهت تولید S-record استفاده کرد.
از objcopy میتوان با تعیین هدف خروجی binary (برای مثال با استفاده از -O binary) برای تولید یک فایل باینری خام (raw binary) استفاده کرد. هنگامی که objcopy یک فایل باینری خام تولید میکند، اساساً یک نسخهٔ تخلیهٔ حافظه (memory dump) از محتوای فایل شیء ورودی ایجاد خواهد کرد. تمامی نمادها و اطلاعات بازتعیین (relocation) دور ریخته خواهند شد. تخلیهٔ حافظه از نشانی بارگذاری پایینترین بخشی که در فایل خروجی رونوشت شده است آغاز خواهد شد.
هنگام تولید یک S-record یا یک فایل باینری خام، استفاده از -S برای حذف بخشهای حاوی اطلاعات اشکالزدایی مفید خواهد بود. در برخی موارد نیز -R برای حذف بخشهایی که حاوی اطلاعات غیرضروری برای فایل باینری هستند کاربرد دارد.
نکته --- objcopy قادر به تغییر ترتیب بایتها (endianness) در فایلهای ورودی خود نیست. اگر قالب ورودی دارای ترتیب بایت باشد (برخی قالبها فاقد آن هستند)، objcopy تنها میتواند ورودیها را به قالبهایی رونوشت کند که ترتیب بایت یکسانی داشته باشند یا فاقد ترتیب بایت باشند (مانند srec). (با این حال، گزینهٔ --reverse-bytes را ببینید.)
گزینهها (OPTIONS)
- infile
- outfile
- به ترتیب فایلهای ورودی و خروجی. اگر outfile را مشخص نکنید، objcopy یک فایل موقت ایجاد کرده و به صورت مخرب، فایل نتیجه را با نام infile جایگزین میکند.
- -I bfdname
- --input-target=bfdname
- قالب شیء فایل مبدأ را به جای تلاش برای استنتاج خودکار آن، bfdname در نظر میگیرد.
- -O bfdname
- --output-target=bfdname
- فایل خروجی را با استفاده از قالب شیء bfdname مینویسد.
- -F bfdname
- --target=bfdname
- از bfdname به عنوان قالب شیء برای هر دو فایل ورودی و خروجی استفاده میکند؛ یعنی دادهها را صرفاً بدون هیچ تبدیلی از مبدأ به مقصد منتقل مینماید.
- -B bfdarch
- --binary-architecture=bfdarch
- هنگام تبدیل یک فایل ورودی فاقد معماری به یک فایل شیء، کاربرد دارد. در این حالت معماری خروجی میتواند روی bfdarch تنظیم شود. اگر فایل ورودی دارای یک bfdarch شناختهشده باشد، این گزینه نادیده گرفته خواهد شد. شما میتوانید با ارجاع به نمادهای ویژهای که در طول فرایند تبدیل ایجاد میشوند، از درون یک برنامه به این دادههای باینری دسترسی پیدا کنید. این نمادها _binary_objfile_start و _binary_objfile_end و _binary_objfile_size نامیده میشوند. برای نمونه، میتوانید یک فایل تصویر را به یک فایل شیء تبدیل کرده و سپس در کد خود با استفاده از این نمادها به آن دسترسی داشته باشید.
- -j sectionpattern
- --only-section=sectionpattern
- تنها
بخشهای
مشخصشده
را از فایل
ورودی به
فایل خروجی
رونوشت
میکند. این
گزینه
میتواند
بیش از یک
بار مشخص
شود. توجه
داشته
باشید که
استفادهٔ
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند.
نویسههای
عامهنما
(wildcard) در sectionpattern
پذیرفته
میشوند.
اگر نخستین نویسهٔ sectionpattern علامت تعجب (!) باشد، بخشهای منطبق رونوشت نخواهند شد، حتی اگر استفادهٔ قبلی از --only-section در همان خط فرمان در غیر این صورت آن را رونوشت میکرد. برای نمونه:
--only-section=.text.* --only-section=!.text.foo
تمام بخشهای منطبق با '.text.*' را رونوشت خواهد کرد اما بخش '.text.foo' را رونوشت نمیکند.
- -R sectionpattern
- --remove-section=sectionpattern
- هر بخشی را
که با sectionpattern
مطابقت
داشته باشد
از فایل
خروجی حذف
میکند. این
گزینه
میتواند
بیش از یک
بار مشخص
شود. توجه
داشته
باشید که
استفادهٔ
نادرست از
این گزینه
ممکن است
فایل خروجی
را غیرقابل
استفاده
کند.
نویسههای
عامهنما
در sectionpattern
پذیرفته
میشوند.
استفادهٔ
همزمان از
هر دو
گزینهٔ -j و
-R رفتاری
تعریفنشده
خواهد داشت.
اگر نخستین نویسهٔ 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) را حذف میکند..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 را سراسری (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 حوزهٔ سراسری میدهد تا در خارج از فایلی که در آن تعریف شده قابل مشاهده باشد. این گزینه میتواند بیش از یک بار مشخص شود. نکته: این گزینه نمیتواند همراه با گزینههای -G یا --keep-global-symbol استفاده شود.
- -w
- --wildcard
- اجازه
استفاده از
عبارتهای
منظم در
symbolnameهای
استفادهشده
در سایر
گزینههای
خط فرمان را
میدهد.
عملگرهای
علامت سؤال
(?)، ستاره (*)،
ممیز
وارونه (\) و
قلابها ([])
میتوانند
در هر کجای
نام نماد به
کار روند.
اگر نویسهٔ
نخستِ نام
نماد علامت
تعجب (!)
باشد،
مفهوم
گزینه برای
آن نماد
معکوس
میشود.
برای مثال:
-w -W !foo -W fo*
باعث میشود objcopy تمام نمادهایی را که با "fo" شروع میشوند به استثنای نماد "foo" تضعیف کند.
- -x
- --discard-all
- نمادهای غیرسراسری را از فایل مبدأ کپی نمیکند.
- -X
- --discard-locals
- نمادهای محلی تولیدشده توسط کامپایلر را کپی نمیکند. (این نمادها معمولاً با L یا . آغاز میشوند.)
- -b byte
- --byte=byte
- اگر درهمبافی از طریق گزینهٔ --interleave فعال شده باشد، محدودهٔ بایتهایی را که باید نگه داشته شوند از byteاُمین بایت آغاز میکند. مقدار byte میتواند در محدودهٔ 0 تا breadth-1 باشد، که در آن breadth مقداری است که توسط گزینهٔ --interleave تعیین شده است.
- -i [breadth]
- --interleave[=breadth]
- تنها یک
محدوده را
از هر breadth
بایت کپی
میکند.
(دادههای
سربرگ تحت
تأثیر قرار
نمیگیرند).
مشخص کنید
کپی در این
محدوده با
کدام بایت
با استفاده
از گزینهٔ
--byte آغاز شود.
پهنای
محدوده را
با گزینهٔ
--interleave-width انتخاب
کنید.
این گزینه برای ساخت فایلهای برنامهریزی ROM مفید است. معمولاً با یک هدف خروجی "srec" به کار میرود. توجه داشته باشید که اگر گزینهٔ --byte را نیز تعیین نکنید، objcopy خطا خواهد گرفت.
پهنای پیشفرض درهمبافی 4 است؛ بنابراین با تنظیم --byte روی 0، objcopy نخستین بایت از هر چهار بایت را از ورودی به خروجی کپی میکند.
- --interleave-width=width
- در صورت
استفاده
همراه با
گزینهٔ
--interleave، هر بار
width بایت را
کپی میکند.
آغاز
محدودهٔ
بایتهای
کپیشونده
با گزینهٔ
--byte و وسعت
محدوده با
گزینهٔ --interleave
تعیین
میشود.
مقدار پیشفرض این گزینه 1 است. مجموع مقدار width و مقدار byte تعیینشده توسط گزینهٔ --byte نباید از پهنای درهمبافی تعیینشده توسط گزینهٔ --interleave تجاوز کند.
این گزینه میتواند برای ساخت ایمیجها برای دو حافظه فلش 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) و حالت
فایل (file mode)
آنها
استفاده
کنید.
این حالت پیشفرض است مگر اینکه 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) میتواند خطرناک باشد، زیرا ممکن است کدهایی وجود داشته باشند که انتظار دارند بخشها در نشانی قدیمیشان قرار داشته باشند.
- --change-warnings
- --adjust-warnings
- اگر از --change-section-address یا --change-section-lma یا --change-section-vma استفاده شود، و الگوی بخش با هیچ بخشی مطابقت نداشته باشد، یک هشدار صادر کن. این رفتار پیشفرض است.
- --no-change-warnings
- --no-adjust-warnings
- اگر از --change-section-address یا --adjust-section-lma یا --adjust-section-vma استفاده شده باشد، حتی اگر الگوی بخش با هیچ بخشی مطابقت نداشته باشد، هشداری صادر نکن.
- --set-section-flags sectionpattern=flags
- پرچمهای هر بخشی را که با sectionpattern مطابقت دارد تنظیم کن. آرگومان flags یک رشته از نامهای پرچم است که با کاما از هم جدا شدهاند. نامهای شناختهشده عبارتند از: alloc، contents، load، noload، readonly، code، data، rom، exclude، share، debug، و large. میتوانید پرچم contents را برای بخشی که محتوایی ندارد تنظیم کنید، اما پاک کردن پرچم contents برای بخشی که محتوا دارد معنایی ندارد--بهجای آن فقط بخش را حذف کنید. همهٔ پرچمها برای تمام قالبهای فایل هدف معنادار نیستند. بهویژه پرچم share فقط برای فایلهای قالب COFF معنی دارد و برای فایلهای قالب ELF کاربردی ندارد. پرچم مختص ELF x86-64 یعنی large متناظر با SHF_X86_64_LARGE است.
- --set-section-alignment sectionpattern=align
- همترازی
(alignment) را برای
هر بخشی که
با sectionpattern
مطابقت
دارد تنظیم
کن. align
همترازی
را بر حسب
بایت مشخص
میکند و
باید توانی
از دو باشد،
یعنی ۱، ۲،
۴، ۸....
نکته - تنظیم تراز یک بخش، نشانیهای LMA یا VMA آن را بهطور خودکار همتراز نخواهد کرد. اگر این نشانیها نیز نیاز به تغییر داشته باشند، باید از گزینههای --change-section-lma و/یا --change-section-vma استفاده شود. همچنین توجه داشته باشید که تغییر VMAها در باینریهای کاملاً پیوندخورده میتواند مشکلاتی ایجاد کند، زیرا ممکن است کدهایی وجود داشته باشند که انتظار دارند محتویات بخشها در نشانی قدیمیشان قرار داشته باشند.
- --add-section sectionname=filename
- هنگام رونوشتبرداری از فایل، یک بخش جدید به نام sectionname اضافه کن. محتویات بخش جدید از فایل filename گرفته میشود. اندازهٔ بخش برابر با اندازهٔ فایل خواهد بود. این گزینه فقط روی قالبهای فایلی کار میکند که از بخشهایی با نامهای دلخواه پشتیبانی میکنند. نکته - ممکن است برای تنظیم ویژگیهای بخش تازهایجادشده، استفاده از گزینهٔ --set-section-flags لازم باشد.
- --dump-section sectionname=filename
- محتویات بخش به نام sectionname را درون فایل filename قرار بده، و هر محتوایی که پیشتر در آن وجود داشته را بازنویسی کن. این گزینه معکوس --add-section است. این گزینه مشابه گزینهٔ --only-section است با این تفاوت که فایلی قالببندیشده نمیسازد، بلکه فقط محتویات را بهصورت دادههای باینری خام و بدون اعمال هیچگونه بازتخصیص (relocation) ذخیره میکند. این گزینه میتواند بیش از یک بار مشخص شود.
- --update-section sectionname=filename
- محتویات
موجود بخشی
به نام sectionname
را با
محتویات
فایل filename
جایگزین کن.
اندازهٔ
بخش متناسب
با اندازهٔ
فایل تنظیم
خواهد شد.
پرچمهای
بخش برای
sectionname بدون
تغییر باقی
میمانند.
برای
فایلهای
قالب ELF،
نگاشت بخش
به قطعه (section to segment
mapping) نیز بدون
تغییر باقی
میماند،
کاری که با
استفاده از
--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 در
حین این
فرایند. این
روش نسبت به
استفاده از
یک اسکریپت
پیونددهنده
برای تغییر
نام، این
مزیت را
دارد که
خروجی
همچنان به
عنوان یک
فایل شیء
باقی
میماند و
به یک فایل
اجرایی
پیوند
خورده
تبدیل
نمیشود.
این گزینه
همان
مجموعهای
از پرچمها
را
میپذیرد
که گزینهٔ
--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
- برخی از قالبهای فایل شیء از نویسههای خاصی در آغاز نمادها استفاده میکنند. رایجترین نویسه از این دست زیرخط (_) است که کامپایلرها اغلب آن را پیش از هر نماد اضافه میکنند. این گزینه به objcopy اعلام میکند که هنگام تبدیل میان قالبهای فایل شیء، نویسهٔ آغازین هر نماد را تغییر دهد. اگر قالبهای فایل شیء از نویسهٔ آغازین یکسانی استفاده کنند، این گزینه هیچ اثری نخواهد داشت. در غیر این صورت، بسته به شرایط، یک نویسه اضافه میکند، یک نویسه را حذف میکند، یا نویسهای را تغییر میدهد.
- --remove-leading-char
- اگر نخستین نویسهٔ یک نماد سراسری، نویسهٔ آغازین نمادین خاصی باشد که توسط قالب فایل شیء استفاده میشود، آن نویسه را حذف میکند. رایجترین نویسهٔ آغازین نماد، زیرخط (_) است. این گزینه زیرخط آغازین را از تمامی نمادهای سراسری حذف خواهد کرد. این ویژگی میتواند زمانی مفید باشد که میخواهید اشیایی با قالبهای فایلی مختلف و با قراردادهای متفاوت برای نامگذاری نمادها را به یکدیگر پیوند دهید. این گزینه با --change-leading-char تفاوت دارد زیرا صرفنظر از قالب فایل شیء در فایل خروجی، در صورت لزوم همواره نام نماد را تغییر میدهد.
- --reverse-bytes=num
- بایتها را
در بخشی با
محتوای
خروجی
معکوس
میکند. طول
بخش باید
بهطور
مساوی بر
مقدار
ارائهشده
بخشپذیر
باشد تا
امکان
انجام
جابهجایی
وجود داشته
باشد.
معکوسسازی
پیش از
انجام
درهمبافی
(interleaving) صورت
میپذیرد.
این گزینه معمولاً در تولید ایمیجهای ROM برای سیستمهای مقصدِ مشکلساز استفاده میشود. برای نمونه، در برخی از بردهای مقصد، کلمات ۳۲-بیتی واکشیشده از ROMهای ۸-بیتی، صرفنظر از ترتیب بایت پردازنده (CPU)، به ترتیب بایت little-endian بازترکیب میشوند. بسته به مدل برنامهنویسی، ممکن است نیاز باشد ترتیب بایت (endianness) حافظهٔ ROM اصلاح شود.
یک فایل ساده را با بخشی حاوی هشت بایت زیر در نظر بگیرید: 12345678.
با استفاده از --reverse-bytes=2 برای مثال فوق، بایتها در فایل خروجی به صورت 21436587 مرتب خواهند شد.
با استفاده از --reverse-bytes=4 برای مثال فوق، بایتها در فایل خروجی به صورت 43218765 مرتب خواهند شد.
با استفاده از --reverse-bytes=2 برای مثال فوق، و به دنبال آن اجرای --reverse-bytes=4 بر روی فایل خروجی، بایتها در دومین فایل خروجی به صورت 34127856 مرتب خواهند شد.
- --srec-len=ival
- تنها برای خروجی srec معنادار است. بیشینهٔ طول رکوردهای 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) نشانهگذاری میکند. این گزینه برای تمام قالبهای فایل شیء معنادار نیست.
- --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
در زمان اشکالزدایی، اشکالزدا تلاش میکند فایل جداگانهٔ اطلاعات اشکالزدایی را در مجموعهای از مکانهای شناختهشده جستجو کند. مجموعهٔ دقیق این مکانها بسته به توزیعِ در حال استفاده متفاوت است، اما معمولاً شامل موارد زیر است:
- "* همان دایرکتوری فایل اجرایی."
- "* یک زیردایرکتوری از دایرکتوری حاوی فایل اجرایی"
- به نام .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 در حال حاضر تنها از وجود یک نام فایل حاوی اطلاعات اشکالزدایی پشتیبانی میکند، نه چندین نام فایل برمبنای یک فایل بهازای هر شیء (one-per-object-file).
- --strip-dwo
- محتویات تمام بخشهای DWARF .dwo را حذف کرده، و باقیماندهٔ بخشهای اشکالزدایی و تمام نمادها را دستنخورده باقی میگذارد. این گزینه برای استفاده توسط کامپایلر بهعنوان بخشی از گزینهٔ -gsplit-dwarf در نظر گرفته شده است، که اطلاعات اشکالزدایی را میان فایل .o و یک فایل مجزای .dwo تقسیم میکند. کامپایلر تمام اطلاعات اشکالزدایی را در همان فایل تولید میکند، سپس از گزینهٔ --extract-dwo برای کپی کردن بخشهای .dwo به فایل .dwo استفاده مینماید، و پس از آن از گزینهٔ --strip-dwo برای حذف آن بخشها از فایل اصلی .o بهره میبرد.
- --extract-dwo
- محتویات تمام بخشهای DWARF .dwo را استخراج میکند. برای اطلاعات بیشتر، گزینهٔ --strip-dwo را ببینید.
- --file-alignment num
- تراز فایل (file alignment) را مشخص میکند. بخشها در فایل همیشه در آفستهایی از فایل آغاز خواهند شد که مضاربی از این عدد باشند. پیشفرض این مقدار 512 است. [این گزینه مخصوص اهداف PE است.]
- --heap reserve
- --heap reserve,commit
- تعداد بایتهای حافظه را برای رزرو (و در صورت تمایل تخصیص یا commit) مشخص میکند تا بهعنوان هیپ (heap) برای این برنامه استفاده شود. [این گزینه مخصوص اهداف PE است.]
- --image-base value
- از value بهعنوان نشانی پایهٔ برنامه یا dll شما استفاده میکند. این پایینترین مکان حافظه است که هنگام بارگذاری برنامه یا dll شما استفاده خواهد شد. برای کاهش نیاز به بازنشانی (relocate) و بهبود عملکرد dllهای شما، هر یک باید یک نشانی پایهٔ یکتا داشته باشند و با هیچ dll دیگری همپوشانی نداشته باشند. مقدار پیشفرض برای فایلهای اجرایی 0x400000 و برای dllها 0x10000000 است. [این گزینه مخصوص اهداف PE است.]
- --section-alignment num
- [این گزینه
مخصوص
اهداف PE است.]
فیلد تراز بخش (section alignment) را در سرآیند PE تنظیم میکند - در صورتی که در فایل باینری وجود داشته باشد. بخشها در حافظه همیشه در نشانیهایی آغاز خواهند شد که مضربی از این عدد هستند. مقدار پیشفرض 0x1000 است.
نکته - اگر نشانیهای LMA یا VMA یک بخش دیگر تراز نباشند، و آن نشانیها از طریق گزینههای --set-section-lma یا --set-section-vma تنظیم نشده باشند، و فایل بهطور کامل بازنشانی (relocate) شده باشد، یک پیام هشدار صادر خواهد شد. سپس تصمیمگیری در مورد اینکه آیا LMA و VMA نیاز به بهروزرسانی دارند یا خیر، بر عهدهٔ کاربر خواهد بود.
- --stack reserve
- --stack reserve,commit
- تعداد بایتهای حافظه را برای رزرو (و در صورت تمایل تخصیص یا commit) مشخص میکند تا بهعنوان پشته (stack) برای این برنامه استفاده شود. [این گزینه مخصوص اهداف PE است.].IP "--subsystem which" 4
- --subsystem which:major
- --subsystem which:major.minor
- زیرسیستمی را مشخص میکند که برنامه شما تحت آن اجرا خواهد شد. مقادیر مجاز برای which عبارتند از "native"، "windows"، "console"، "posix"، "efi-app"، "efi-bsd"، "efi-rtd"، "sal-rtd" و "xbox". همچنین میتوانید نسخه زیرسیستم را نیز به صورت اختیاری تعیین کنید. مقادیر عددی نیز برای which پذیرفته میشوند. [این گزینه مختص اهداف PE است.]
- --extract-symbol
- پرچمها و نمادهای بخشهای فایل را نگه میدارد اما تمام دادههای بخشها را حذف میکند. بهطور مشخص، این گزینه:
- *<محتوای تمام بخشها را حذف میکند؛>
- *<اندازه هر بخش را برابر با صفر قرار میدهد؛ و>
- *<آدرس شروع فایل را برابر با صفر قرار میدهد.>
این گزینه برای ساخت یک فایل .sym برای یک هسته VxWorks استفاده میشود. همچنین میتواند روش مفیدی برای کاهش اندازه فایل ورودی پیونددهنده برای --just-symbols باشد.
- --compress-debug-sections
- بخشهای اشکالزدایی DWARF را با استفاده از zlib به همراه SHF_COMPRESSED از ELF ABI فشرده میکند. توجه - اگر فشردهسازی در واقع باعث بزرگتر شدن یک بخش شود، آن بخش فشرده نمیشود.
- --compress-debug-sections=none
- --compress-debug-sections=zlib
- --compress-debug-sections=zlib-gnu
- --compress-debug-sections=zlib-gabi
- --compress-debug-sections=zstd
- برای فایلهای ELF، این گزینهها چگونگی فشردهسازی بخشهای اشکالزدایی DWARF را کنترل میکنند. گزینه --compress-debug-sections=none معادل --decompress-debug-sections است. گزینههای --compress-debug-sections=zlib و --compress-debug-sections=zlib-gabi معادل --compress-debug-sections هستند. گزینه --compress-debug-sections=zlib-gnu بخشهای اشکالزدایی DWARF را با استفاده از قالب منسوخشده zlib-gnu فشرده میکند. نام بخشهای اشکالزدایی تغییر مییابد تا با .zdebug آغاز شوند. گزینه --compress-debug-sections=zstd بخشهای اشکالزدایی DWARF را با استفاده از zstd فشرده میکند. توجه - اگر فشردهسازی در واقع باعث بزرگتر شدن یک بخش شود، آن بخش نه فشرده شده و نه تغییر نام داده میشود.
- --decompress-debug-sections
- بخشهای اشکالزدایی DWARF را از حالت فشرده خارج میکند. برای یک بخش .zdebug، نام اصلی آن بازیابی میشود.
- --elf-stt-common=yes
- --elf-stt-common=no
- برای فایلهای ELF، این گزینهها مشخص میکنند که آیا نمادهای عمومی (common) باید به نوع "STT_COMMON" تبدیل شوند یا "STT_OBJECT". گزینه --elf-stt-common=yes نوع نمادهای عمومی را به "STT_COMMON" تبدیل میکند. گزینه --elf-stt-common=no نوع نمادهای عمومی را به "STT_OBJECT" تبدیل مینماید.
- --merge-notes
- --no-merge-notes
- برای فایلهای ELF، تلاش میکند (یا تلاش نمیکند) با حذف یادداشتهای تکراری، اندازه هر بخش از نوع SHT_NOTE را کاهش دهد.
- -V
- --version
- شماره نسخه objcopy را نمایش میدهد.
- --verilog-data-width=bytes
- برای خروجی Verilog، این گزینه تعداد بایتهای تبدیلشده برای هر عنصر داده خروجی را کنترل میکند. هدف ورودی، ترتیب بایتها (endianness) در تبدیل را مشخص میکند.
- -v
- --verbose
- خروجی پرگو: فهرستی از تمام فایلهای شیء اصلاحشده را نمایش میدهد. در مورد آرشیوها، 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) اعطا میشود؛ بدون هیچ بخش ثابت (Invariant Sections)، بدون متنهای روی جلد (Front-Cover Texts)، و بدون متنهای پشت جلد (Back-Cover Texts). نسخهای از این مجوز در بخشی با عنوان “GNU Free Documentation License” آمده است.
| 2026-01-23 | binutils-2.45.1 |