OBJCOPY(1) أدوات تطوير جنو OBJCOPY(1)

الاسم

objcopy - نسخ ملفات الكائنات وترجمتها

موجز

objcopy [-F اسم_bfd|--target=اسم_bfd]
[-I اسم_bfd|--input-target=اسم_bfd]
[-O اسم_bfd|--output-target=اسم_bfd]
[-B معمارية_bfd|--binary-architecture=معمارية_bfd]
[-S|--strip-all]
[-g|--strip-debug]
[--strip-unneeded]
[-K اسم_الرمز|--keep-symbol=اسم_الرمز]
[--keep-file-symbols]
[--keep-section-symbols]
[-N اسم_الرمز|--strip-symbol=اسم_الرمز]
[--strip-unneeded-symbol=اسم_الرمز]
[-G اسم_الرمز|--keep-global-symbol=اسم_الرمز]
[--localize-hidden]
[-L اسم_الرمز|--localize-symbol=اسم_الرمز]
[--globalize-symbol=اسم_الرمز]
[--globalize-symbols=اسم_الملف]
[-W اسم_الرمز|--weaken-symbol=اسم_الرمز]
[-w|--wildcard]
[-x|--discard-all]
[-X|--discard-locals]
[-b بايت|--byte=بايت]
[-i [اتساع]|--interleave[=اتساع]]
[--interleave-width=عرض]
[-j نمط_القسم|--only-section=نمط_القسم]
[-R نمط_القسم|--remove-section=نمط_القسم]
[--keep-section=نمط_القسم]
[--remove-relocations=نمط_القسم]
[--strip-section-headers]
[-p|--preserve-dates]
[-D|--enable-deterministic-archives]
[-U|--disable-deterministic-archives]
[--debugging]
[--gap-fill=قيمة]
[--pad-to=عنوان]
[--set-start=قيمة]
[--adjust-start=زيادة]
[--change-addresses=زيادة]
[--change-section-address نمط_القسم{=,+,-}قيمة]
[--change-section-lma نمط_القسم{=,+,-}قيمة]
[--change-section-vma نمط_القسم{=,+,-}قيمة]
[--change-warnings] [--no-change-warnings]
[--set-section-flags نمط_القسم=أعلام]
[--set-section-alignment نمط_القسم=محاذاة]
[--add-section اسم_القسم=اسم_الملف]
[--dump-section اسم_القسم=اسم_الملف]
[--update-section اسم_القسم=اسم_الملف]
[--rename-section اسم_قديم=اسم_جديد[,أعلام]]
[--long-section-names {enable,disable,keep}]
[--change-leading-char] [--remove-leading-char]
[--reverse-bytes=عدد]
[--srec-len=قيمة_صحيحة] [--srec-forceS3]
[--redefine-sym قديم=جديد]
[--redefine-syms=اسم_الملف]
[--weaken]
[--keep-symbols=اسم_الملف]
[--strip-symbols=اسم_الملف]
[--strip-unneeded-symbols=اسم_الملف]
[--keep-global-symbols=اسم_الملف]
[--localize-symbols=اسم_الملف]
[--weaken-symbols=اسم_الملف]
[--binary-symbol-prefixسلسلة]
[--add-symbol اسم=[قسم:]قيمة[,أعلام]]
[--alt-machine-code=فهرس]
[--prefix-symbols=سلسلة]
[--prefix-sections=سلسلة]
[--prefix-alloc-sections=سلسلة]
[--add-gnu-debuglink=مسار_إلى_ملف]
[--only-keep-debug]
[--strip-dwo]
[--extract-dwo]
[--extract-symbol]
[--writable-text]
[--readonly-text]
[--pure]
[--impure]
[--file-alignment=عدد]
[--heap=محجوز[,مُنفذ]]
[--image-base=عنوان]
[--section-alignment=عدد]
[--stack=محجوز[,مُنفذ]]
[--subsystem=أي:رئيس.فرعي]
[--compress-debug-sections]
[--decompress-debug-sections]
[--elf-stt-common=قيمة]
[--merge-notes]
[--no-merge-notes]
[--verilog-data-width=قيمة]
[-v|--verbose]
[-V|--version]
[--help] [--info]
ملف_المدخل [ملف_المخرج]

الوصف

تنسخ أداة GNU objcopy محتويات ملف كائن إلى آخر. تستخدم objcopy مكتبة GNU BFD لقراءة ملفات الكائنات وكتابتها. يمكنها كتابة ملف الكائن الوجهة بتنسيق يختلف عن تنسيق ملف الكائن المصدر. يُتحكم في السلوك الدقيق لـ objcopy عبر خيارات سطر الأوامر. لاحظ أن objcopy يجب أن تكون قادرة على نسخ ملف مرتبط بالكامل بين أي تنسيقين. ومع ذلك، قد لا يعمل نسخ ملف كائن قابل لإعادة التوطين بين أي تنسيقين كما هو متوقع.

تنشئ objcopy ملفات مؤقتة لإجراء ترجماتها وتحذفها بعد ذلك. تستخدم objcopy مكتبة BFD للقيام بكل أعمال الترجمة؛ ولديها وصول إلى جميع التنسيقات الموصوفة في BFD وبالتالي فهي قادرة على التعرف على معظم التنسيقات دون إخبارها صراحة.

يمكن استخدام objcopy لتوليد سجلات-S باستخدام هدف مخرج srec (على سبيل المثال، استخدم -O srec).

يمكن استخدام objcopy لتوليد ملف ثنائي خام باستخدام هدف مخرج binary (على سبيل المثال، استخدم -O binary). عندما تولد objcopy ملفاً ثنائياً خاماً، فإنها ستنتج جوهرياً تفريغاً للذاكرة لمحتويات ملف كائن المدخل. ستُطرح جميع الرموز ومعلومات إعادة التوطين. سيبدأ تفريغ الذاكرة عند عنوان التحميل لأدنى قسم نُسخ إلى ملف المخرج.

عند توليد سجل-S أو ملف ثنائي خام، قد يكون من المفيد استخدام -S لإزالة الأقسام التي تحتوي على معلومات تنقيح. في بعض الحالات، سيكون -R مفيداً لإزالة الأقسام التي تحتوي على معلومات لا يحتاجها الملف الثنائي.

ملاحظة---لا تستطيع objcopy تغيير ترتيب البايتات (endianness) لملفات مدخلاتها. إذا كان لتنسيق المدخل ترتيب بايتات (بعض التنسيقات ليس لها)، فإن objcopy يمكنها فقط نسخ المدخلات إلى تنسيقات ملفات لها نفس ترتيب البايتات أو التي ليس لها ترتيب بايتات (مثل srec). (ومع ذلك، انظر خيار --reverse-bytes.)

الخيارات

ملف_المدخل
ملف_المخرج
ملفا المدخل والمخرج، على التوالي. إذا لم تحدد ملف_المخرج، فستنشئ objcopy ملفاً مؤقتاً وتغير اسم النتيجة بشكل تخريبي إلى اسم ملف_المدخل.
اعتبر تنسيق كائن ملف المصدر هو اسم_bfd، بدلاً من محاولة استنتاجه.
اكتب ملف المخرج باستخدام تنسيق الكائن اسم_bfd.
استخدم اسم_bfd كتنسيق كائن لكل من ملفي المدخل والمخرج؛ أي انقل البيانات ببساطة من المصدر إلى الوجهة دون ترجمة.
مفيد عند تحويل ملف مدخل عديم المعمارية إلى ملف كائن. في هذه الحالة يمكن ضبط معمارية المخرج إلى معمارية_bfd. سيُتجاهل هذا الخيار إذا كان لملف المدخل معمارية_bfd معروفة. يمكنك الوصول إلى هذه البيانات الثنائية داخل برنامج ما بالإشارة إلى الرموز الخاصة التي أُنشئت بواسطة عملية التحويل. تُسمى هذه الرموز _binary_objfile_start و _binary_objfile_end و _binary_objfile_size. على سبيل المثال، يمكنك تحويل ملف صورة إلى ملف كائن ثم الوصول إليه في كودك البرمجي باستخدام هذه الرموز.
انسخ فقط الأقسام المشار إليها من ملف المدخل إلى ملف المخرج. يمكن إعطاء هذا الخيار أكثر من مرة. لاحظ أن استخدام هذا الخيار بشكل غير مناسب قد يجعل ملف المخرج غير قابل للاستخدام. محارف البدل مقبولة في نمط_القسم.

إذا كان المحرف الأول من نمط_القسم هو علامة التعجب (!)، فلن تُنسخ الأقسام المتطابقة، حتى لو كان استخدام سابق لـ --only-section في نفس سطر الأوامر سيؤدي بخلاف ذلك إلى نسخها. على سبيل المثال:

--only-section=.text.* --only-section=!.text.foo

سيُنسخ جميع الأقسام التي تطابق '.text.*' ولكن ليس القسم '.text.foo'.

أزل أي قسم يطابق نمط_القسم من ملف المخرج. يمكن إعطاء هذا الخيار أكثر من مرة. لاحظ أن استخدام هذا الخيار بشكل غير مناسب قد يجعل ملف المخرج غير قابل للاستخدام. محارف البدل مقبولة في نمط_القسم. يؤدي استخدام كل من الخيارين -j و -R معاً إلى سلوك غير محدد.

إذا كان المحرف الأول من sectionpattern هو علامة التعجب (!)، فلن تتم إزالة الأقسام المتطابقة حتى لو كان استخدام سابق لـ --remove-section في نفس سطر الأوامر سيؤدي إلى إزالتها. على سبيل المثال:

--remove-section=.text.* --remove-section=!.text.foo

سيزيل جميع الأقسام التي تطابق النمط '.text.*'، لكنه لن يزيل القسم '.text.foo'.

عند إزالة الأقسام من ملف المخرج، احتفظ بالأقسام التي تطابق sectionpattern.
أزل عمليات إعادة التوطين غير الديناميكية من ملف المخرج لأي قسم يطابق نمط_القسم. يمكن إعطاء هذا الخيار أكثر من مرة. لاحظ أن استخدام هذا الخيار بشكل غير مناسب قد يجعل ملف المخرج غير قابل للاستخدام، ومحاولة إزالة قسم إعادة توطين ديناميكي مثل .rela.plt من ملف تنفيذي أو مكتبة مشتركة باستخدام --remove-relocations=.plt لن تنجح. محارف البدل مقبولة في نمط_القسم. على سبيل المثال:
--remove-relocations=.text.*

سيزيل عمليات إعادة التوطين لجميع الأقسام التي تطابق النمط '.text.*'.

إذا كان المحرف الأول من sectionpattern هو علامة التعجب (!)، فلن يتم إزالة إعادة التوطين (relocation) للأقسام المتطابقة حتى لو كان استخدام سابق لـ --remove-relocations في نفس سطر الأوامر سيؤدي إلى إزالة عمليات إعادة التوطين. على سبيل المثال:

--remove-relocations=.text.* --remove-relocations=!.text.foo

سيزيل جميع عمليات إعادة التوطين للأقسام التي تطابق النمط '.text.*'، لكنه لن يزيل عمليات إعادة التوطين للقسم '.text.foo'.

جرد رأس القسم؛ هذا الخيار خاص بملفات ELF. ويتضمن --strip-all و --merge-notes.
لا تنسخ معلومات إعادة التوطين والرموز من ملف المصدر. كما يحذف أقسام تنقيح الأخطاء.
لا تنسخ رموز أو أقسام تنقيح الأخطاء من ملف المصدر.
إزالة جميع الرموز التي لا حاجة إليها لمعالجة إعادة التوطين بالإضافة إلى رموز تنقيح الأخطاء والمقاطع المزالَة بواسطة --strip-debug.
عند تجريد الرموز، احتفظ بالرمز symbolname حتى لو كان سيُجرد في الحالة العادية. يمكن إعطاء هذا الخيار أكثر من مرة.
لا تنسخ الرمز اسم_الرمز من ملف المصدر. يمكن إعطاء هذا الخيار أكثر من مرة.
لا تنسخ الرمز symbolname من ملف المصدر إلا إذا كان مطلوبًا لعملية إعادة توطين (relocation). يمكن تكرار هذا الخيار أكثر من مرة.
أبقِ الرمز symbolname وحده عالميًا. اجعل جميع الرموز الأخرى محلية في الملف، بحيث لا تظهر خارجيًا. يمكن تكرار هذا الخيار أكثر من مرة. ملاحظة: لا يمكن استخدام هذا الخيار مع خياري --globalize-symbol أو --globalize-symbols.
في كائن ELF، علم جميع الرموز التي لها رؤية مخفية أو داخلية على أنها محلية. يُطبق هذا الخيار فوق خيارات التحويل إلى محلي الخاصة برموز معينة مثل -L.
حوّل رمزًا عالميًا أو ضعيفًا يسمى symbolname إلى رمز محلي، بحيث لا يظهر خارجيًا. يمكن تكرار هذا الخيار أكثر من مرة. ملاحظة - لا تُحوّل الرموز الفريدة.
اجعل الرمز symbolname ضعيفًا. يمكن تكرار هذا الخيار أكثر من مرة.
عند استخدامه مع --input-target=binary، يضبط string ليكون الاسم الأساسي للرموز المولدة لملف المدخلات. هذه الرموز هي:
<string>_start
<string>_end
<string>_size

يشتق معالج المدخلات الثنائية مبدئيًا اسم بادئة الرمز من نسخة مشوهة (mangled) لاسم ملف المدخلات والبادئة _binary. يتيح هذا الخيار تحديدها صراحة.

امنح الرمز symbolname نطاقًا عالميًا بحيث يظهر خارج الملف الذي عُرّف فيه. يمكن تكرار هذا الخيار أكثر من مرة. ملاحظة: لا يمكن استخدام هذا الخيار بالتزامن مع خيارات -G أو --keep-global-symbol.
اسمح بالتعبيرات النمطية في symbolnames المستخدمة في خيارات سطر الأوامر الأخرى. يمكن استخدام معاملات علامة الاستفهام (?)، والنجمة (*)، والشرطة المائلة العكسية (\)، والأقواس المربعة ([]) في أي مكان في اسم الرمز. إذا كان المحرف الأول من اسم الرمز هو علامة التعجب (!)، فإن معنى التبديل يُعكس لهذا الرمز. على سبيل المثال:
-w -W !foo -W fo*

سيؤدي ذلك إلى قيام objcopy بإضعاف جميع الرموز التي تبدأ بـ "fo" باستثناء الرمز "foo".

لا تنسخ الرموز غير العالمية من ملف المصدر.
لا تنسخ الرموز المحلية التي ولدها المجمّع. (تبدأ هذه عادةً بـ L أو ..)
إذا فعل التداخل عبر خيار --interleave، فابدأ نطاق البايتات المراد إبقاؤها عند البايت رقم byte. يمكن أن يكون byte في النطاق من 0 إلى breadth-1، حيث breadth هي القيمة المعطاة عبر خيار --interleave.
انسخ فقط نطاقًا من كل breadth بايت. (لا تتأثر بيانات الترويسة). اختر أي بايت في النطاق يبدأ النسخ باستخدام خيار --byte. اختر عرض النطاق باستخدام خيار --interleave-width.

هذا الخيار مفيد لإنشاء ملفات لبرمجة ROM. يُستخدم عادةً مع هدف مخرجات "srec". لاحظ أن objcopy سيصدر تنبيهًا إذا لم تحدد خيار --byte أيضًا.

عرض التداخل المبدئي هو 4، لذا عند ضبط --byte على 0، سيقوم objcopy بنسخ البايت الأول من كل أربعة بايتات من المدخلات إلى المخرجات.

عند استخدامه مع خيار --interleave، انسخ width بايت في المرة الواحدة. تُحدد بداية نطاق البايتات المراد نسخها بواسطة خيار --byte، ويُحدد مدى النطاق باستخدام خيار --interleave.

القيمة المبدئية لهذا الخيار هي 1. يجب ألا تتجاوز قيمة width زائد قيمة byte المحددة بخيار --byte عرض التداخل المحدد بخيار --interleave.

يمكن استخدام هذا الخيار لإنشاء صور لوميضتين (flashes) بسعة 16 بت متداخلتين في ناقل 32 بت عن طريق تمرير -b 0 -i 4 --interleave-width=2 و -b 2 -i 4 --interleave-width=2 إلى أمري objcopy. إذا كانت المدخلات '12345678' فستكون المخرجات '1256' و '3478' على التوالي.

اضبط تاريخي الوصول والتعديل لملف المخرجات ليكونا نفس تاريخي ملف المدخلات.

ينسخ هذا الخيار أيضًا التاريخ المخزن في ترويسة ملف بتنسيق PE، ما لم يكن متغير البيئة SOURCE_DATE_EPOCH معرفًا. إذا كان معرفًا، فسيُستخدم هذا المتغير كالتاريخ المخزن في الترويسة، ويُفسر على أنه عدد الثواني منذ حقبة يونكس.

العمل في الوضع المحدد (deterministic). عند نسخ أعضاء الأرشيف وكتابة فهرس الأرشيف، استخدم صفرًا لـ UIDs و GIDs والطوابع الزمنية، واستخدم أوضاع ملفات متسقة لجميع الملفات.

إذا ضُبطت binutils مع خيار --enable-deterministic-archives، فإن هذا الوضع يكون مفعلا مبدئيا. يمكن تعطيله بخيار -U أدناه.

لا يعمل في الوضع المحدد. هذا هو عكس الخيار -D أعلاه: عند نسخ أعضاء الأرشيف وكتابة فهرس الأرشيف، تُستخدم قيم UID وGID والطابع الزمني ووضع الملف الفعلية.

هذا هو المبدئي ما لم يتم ضبط binutils بـ --enable-deterministic-archives.

حوّل معلومات التنقيح، إن أمكن. ليس هذا هو المبدئي لأن تنسيقات تنقيح معينة فقط هي المدعومة، وعملية التحويل قد تستغرق وقتًا طويلاً.
املأ الفجوات بين الأقسام بالقيمة val. تنطبق هذه العملية على عنوان التحميل (LMA) للأقسام. يُنفذ ذلك عن طريق زيادة حجم القسم ذي العنوان الأدنى، وملء المساحة الإضافية الناتجة بالقيمة val.
حشّ ملف المخرجات حتى عنوان التحميل address. يُنفذ ذلك عن طريق زيادة حجم القسم الأخير. تُملأ المساحة الإضافية بالقيمة المحددة بواسطة --gap-fill (المبدئي هو صفر).
اضبط عنوان البدء (يُعرف أيضًا باسم عنوان الإدخال) للملف الجديد على val. لا تدعم جميع تنسيقات ملفات الكائنات ضبط عنوان البدء.
غيّر عنوان البدء (يُعرف أيضًا باسم عنوان الإدخال) بإضافة incr. لا تدعم جميع تنسيقات ملفات الكائنات ضبط عنوان البدء.
يُغيّر عناوين VMA و LMA لجميع الأقسام، بالإضافة إلى عنوان البدء، عبر إضافة incr. لا تسمح بعض تنسيقات ملفات الكائنات بتغيير عناوين الأقسام عشوائيًا. لاحظ أن هذا لا يعيد توطين الأقسام؛ فإذا كان البرنامج يتوقع تحميل الأقسام في عنوان معين، واستُخدم هذا الخيار لتغيير الأقسام بحيث تُحمّل في عنوان مختلف، فقد يفشل البرنامج.
يضبط أو يُغيّر كلاً من عنوان VMA وعنوان LMA لأي قسم يطابق sectionpattern. إذا استُخدمت علامة =، يُضبط عنوان القسم على val. خلاف ذلك، تُضاف val إلى عنوان القسم أو تُطرح منه. راجع الملاحظات الواردة تحت --change-addresses أعلاه. إذا لم يطابق sectionpattern أي أقسام في ملف المدخلات، فسيُصدر تحذير، ما لم يُستخدم الخيار --no-change-warnings.
يضبط أو يُغيّر عنوان LMA لأي أقسام تطابق sectionpattern. عنوان LMA هو العنوان الذي سيُحمّل القسم فيه داخل الذاكرة وقت تحميل البرنامج. عادةً ما يكون هو نفسه عنوان VMA، وهو عنوان القسم وقت تشغيل البرنامج، ولكن في بعض الأنظمة، خاصة تلك التي يُحفظ فيها البرنامج في ROM، يمكن أن يختلف الاثنان. إذا استُخدمت علامة =، يُضبط عنوان القسم على val. خلاف ذلك، تُضاف val إلى عنوان القسم أو تُطرح منه. راجع الملاحظات الواردة تحت --change-addresses أعلاه. إذا لم يطابق sectionpattern أي أقسام في ملف المدخلات، فسيُصدر تحذير، ما لم يُستخدم --no-change-warnings.
يضبط أو يُغيّر عنوان VMA لأي قسم يطابق sectionpattern. عنوان VMA هو العنوان الذي سيقع فيه القسم بمجرد بدء تنفيذ البرنامج. عادةً ما يكون هو نفسه عنوان LMA، وهو العنوان الذي سيُحمّل القسم فيه داخل الذاكرة، ولكن في بعض الأنظمة، خاصة تلك التي يُحفظ فيها البرنامج في ROM، يمكن أن يختلف الاثنان. إذا استُخدمت علامة =، يُضبط عنوان القسم على val. خلاف ذلك، تُضاف val إلى عنوان القسم أو تُطرح منه. راجع الملاحظات الواردة تحت --change-addresses أعلاه. إذا لم يطابق sectionpattern أي أقسام في ملف المدخلات، فسيُصدر تحذير، ما لم يُستخدم --no-change-warnings.

ملاحظة - قد يكون تغيير VMA للأقسام في ملف ثنائي مرتبِط كليًا أمرًا خطيرًا، حيث قد توجد شيفرات تتوقع وجود الأقسام في عناوينها القديمة.

إذا استُخدم --change-section-address أو --change-section-lma أو --change-section-vma، ولم يطابق نمط القسم أي أقسام، فيُصدر تحذير. وهذا هو السلوك المبدئي.
لا يُصدر تحذيرًا إذا استُخدم --change-section-address أو --adjust-section-lma أو --adjust-section-vma، حتى لو لم يطابق نمط القسم أي أقسام.
يضبط الأعلام لأي أقسام تطابق sectionpattern. المعطى flags هو سلسلة نصية من أسماء الأعلام مفصولة بفاصلة. الأسماء المعروفة هي alloc، و contents، و load، و noload، و readonly، و code، و data، و rom، و exclude، و share، و debug، و large. يمكنك ضبط العلم contents لقسم ليس له محتويات، ولكن ليس من المنطقي مسح علم contents لقسم له محتويات -- فبدلاً من ذلك ما عليك سوى إزالة القسم. ليست كل الأعلام ذات معنى لجميع تنسيقات ملفات الكائنات. وبشكل خاص، علم share ليس له معنى إلا لملفات بتنسيق COFF وليس لملفات بتنسيق ELF. يقابل علم large الخاص بـ ELF x86-64 القيمة SHF_X86_64_LARGE.
يضبط المحاذاة لأي أقسام تطابق sectionpattern. يحدد align المحاذاة بالبايت ويجب أن يكون من قوى العدد اثنين، أي 1، 2، 4، 8....

ملاحظة - لا يؤدي ضبط محاذاة القسم إلى محاذاة عناوين LMA أو VMA الخاصة به آليًا. إذا لزم تغيير هذه العناوين أيضًا، فينبغي استخدام الخيارين --change-section-lma و/أو --change-section-vma. لاحظ أيضًا أن تغيير قيم VMA يمكن أن يسبب مشكلات في الملفات الثنائية المرتبِطة كليًا حيث قد توجد شيفرات تتوقع وجود محتويات الأقسام في عناوينها القديمة.

يضيف قسمًا جديدًا باسم sectionname أثناء نسخ الملف. تُؤخذ محتويات القسم الجديد من الملف filename. سيكون حجم القسم هو نفس حجم الملف. لا يعمل هذا الخيار إلا مع تنسيقات الملفات التي تدعم أقسامًا بأسماء عشوائية. ملاحظة - قد يلزم استخدام خيار --set-section-flags لضبط سمات القسم المنشأ حديثًا.
يضع محتويات القسم المسمى sectionname في الملف filename، مع الكتابة فوق أي محتويات قد كانت موجودة مسبقًا. هذا الخيار هو عكس --add-section. يشبه هذا الخيار خيار --only-section باستثناء أنه لا ينشئ ملفًا منسقًا، بل يفرغ المحتويات كبيانات ثنائية خام فقط، دون تطبيق أي عمليات إعادة توطين. يمكن تحديد هذا الخيار أكثر من مرة.
يستبدل المحتويات الحالية لقسم مسمى sectionname بمحتويات الملف filename. سيُعدّل حجم القسم ليناسب حجم الملف. ستبقى أعلام القسم لـ sectionname دون تغيير. وبالنسبة لملفات بتنسيق ELF، سيبقى أيضًا تعيين القسم إلى القطعة (segment) دون تغيير، وهو أمر غير ممكن باستخدام --remove-section متبوعًا بـ --add-section. يمكن تحديد هذا الخيار أكثر من مرة.

ملاحظة - من الممكن استخدام --rename-section و --update-section لتحديث وإعادة تسمية قسم معًا من سطر أوامر واحد. في هذه الحالة، مرر اسم القسم الأصلي إلى --update-section، والاسمين الأصلي والجديد للقسم إلى --rename-section.

يضيف رمزًا جديدًا باسم name أثناء نسخ الملف. يمكن تحديد هذا الخيار عدة مرات. إذا حُدد section، فسيُربط الرمز بهذا القسم ويكون نسبيًا له، وإلا فسيكون رمزًا مطلقًا (ABS). سيؤدي تحديد قسم غير معرف إلى خطأ فادح. لا يوجد تحقق من القيمة، بل ستُؤخذ كما هي محددة. يمكن تحديد أعلام الرموز وليست كل الأعلام ذات معنى لجميع تنسيقات ملفات الكائنات. سيكون الرمز عالميًا بشكل مبدئي. العلم الخاص 'before=othersym' سيُدرج الرمز الجديد أمام othersym المحدد، وإلا فستُضاف الرموز في نهاية جدول الرموز بالترتيب الذي ظهرت به.
يُعيد تسمية قسم من oldname إلى newname، مع إمكانية تغيير أعلام القسم إلى flags أثناء العملية. يتميز هذا عن استخدام سيناريو رابط (linker script) لإجراء إعادة التسمية في أن المخرجات تظل ملف كائن ولا تصبح ملفًا تنفيذيًا مرتبِطًا. يقبل هذا الخيار نفس مجموعة الأعلام التي يقبلها خيار --set-section-flags.

هذا الخيار مفيد بشكل خاص عندما يكون تنسيق المدخلات ثنائيًا، حيث سيؤدي ذلك دائمًا إلى إنشاء قسم يسمى .data. فإذا أردت مثلاً إنشاء قسم يسمى .rodata يحتوي على بيانات ثنائية، فيمكنك استخدام سطر الأوامر التالي لتحقيق ذلك:

objcopy -I binary -O <output_format> -B <architecture> \
 --rename-section .data=.rodata,alloc,load,readonly,data,contents \
 <input_binary_file> <output_object_file>
يتحكم في التعامل مع أسماء الأقسام الطويلة عند معالجة تنسيقات الكائنات "COFF" و "PE-COFF". السلوك المبدئي، keep، هو الحفاظ على أسماء الأقسام الطويلة إذا كانت موجودة في ملف المدخلات. يُمكن الخياران enable و disable أو يعطلان قسريًا استخدام أسماء الأقسام الطويلة في كائن المخرجات؛ فعند تفعيل disable، ستُبتر أي أسماء أقسام طويلة في كائن المدخلات. سيُصدر خيار enable أسماء أقسام طويلة فقط إذا كانت موجودة في المدخلات؛ وهذا يماثل keep تقريبًا، ولكن لم يُحدد ما إذا كان خيار enable قد يفرض إنشاء جدول سلاسل نصية فارغ في ملف المخرجات.
تستخدم بعض تنسيقات ملفات الكائنات محارف خاصة في بداية الرموز. المحرف الأكثر شيوعًا هو الشرطة السفلية، التي غالبًا ما تضيفها المترجمات قبل كل رمز. يخبر هذا الخيار objcopy بتغيير المحرف البادئ لكل رمز عند التحويل بين تنسيقات ملفات الكائنات. إذا كانت تنسيقات ملفات الكائنات تستخدم نفس المحرف البادئ، فلن يكون لهذا الخيار أي تأثير. خلاف ذلك، سيضيف محرفًا، أو يزيل محرفًا، أو يغير محرفًا، حسب الاقتضاء.
إذا كان المحرف الأول لرمز عالمي هو محرف بادئ خاص بالرموز يستخدمه تنسيق ملف الكائن، فسيُزال هذا المحرف. المحرف البادئ الأكثر شيوعًا للرموز هو الشرطة السفلية. سيقوم هذا الخيار بإزالة الشرطة السفلية البادئة من جميع الرموز العالمية. يمكن أن يكون هذا مفيدًا إذا كنت ترغب في ربط كائنات من تنسيقات ملفات مختلفة تتبع اصطلاحات مختلفة لأسماء الرموز. يختلف هذا عن --change-leading-char لأنه يغير اسم الرمز دائمًا عند الاقتضاء، بغض النظر عن تنسيق ملف الكائن لملف المخرجات.
يعكس البايتات في قسم له محتويات مخرجات. يجب أن يكون طول القسم قابلاً للقسمة تمامًا على القيمة المعطاة لكي تتم عملية التبادل. تتم عملية العكس قبل إجراء التداخل.

يُستخدم هذا الخيار عادةً في توليد صور ROM للأنظمة المستهدفة التي بها مشكلات. على سبيل المثال، في بعض لوحات الأجهزة المستهدفة، تُعاد تجميع الكلمات ذات 32 بت المجلوية من ذاكرات ROM ذات 8 بت بترتيب البايتات الصغير (little-endian) بغض النظر عن ترتيب بايتات المعالج. وبناءً على نموذج البرمجة، قد يلزم تعديل ترتيب بايتات (endianness) الـ ROM.

لنتأمل ملفًا بسيطًا يحتوي على قسم يضم البايتات الثمانية التالية: 12345678.

باستخدام --reverse-bytes=2 للمثال أعلاه، ستكون البايتات في ملف المخرجات مرتبة كالتالي 21436587.

باستخدام --reverse-bytes=4 للمثال أعلاه، ستكون البايتات في ملف المخرجات مرتبة كالتالي 43218765.

باستخدام --reverse-bytes=2 للمثال أعلاه، متبوعًا بـ --reverse-bytes=4 على ملف المخرجات، ستكون البايتات في ملف المخرجات الثاني مرتبة كالتالي 34127856.

ذو معنى فقط لمخرجات srec. يضبط الحد الأقصى لطول سجلات S المنتجة إلى ival. يغطي هذا الطول كلاً من حقول العنوان والبيانات و crc.
ذو معنى فقط لمخرجات srec. يتجنب توليد سجلات S1/S2، وينشئ تنسيق سجلات S3 فقط.
يغير اسم الرمز old إلى new. يمكن أن يكون هذا مفيدًا عند محاولة ربط شيئين ببعضهما دون توفر المصدر، ومع وجود تضارب في الأسماء.
يطبق خيار --redefine-sym على كل زوج من الرموز "old new" المذكورة في الملف filename. الملف filename هو ببساطة ملف مسطح، يحتوي على زوج رموز واحد في كل سطر. يمكن كتابة تعليقات الأسطر باستخدام محرف الهاش. يمكن تحديد هذا الخيار أكثر من مرة.
يغير جميع الرموز العالمية في الملف لتصبح ضعيفة (weak). يمكن أن يكون هذا مفيدًا عند بناء كائن سيُربط بكائنات أخرى باستخدام خيار -R للرابط. لا يكون هذا الخيار فعلاً إلا عند استخدام تنسيق ملف كائن يدعم الرموز الضعيفة.
يطبق خيار --keep-symbol على كل رمز مذكور في الملف filename. الملف filename هو ببساطة ملف مسطح، يحتوي على اسم رمز واحد في كل سطر. يمكن كتابة تعليقات الأسطر باستخدام محرف الهاش. يمكن تحديد هذا الخيار أكثر من مرة.
يطبق خيار --strip-symbol على كل رمز مذكور في الملف filename. الملف filename هو ببساطة ملف مسطح، يحتوي على اسم رمز واحد في كل سطر. يمكن كتابة تعليقات الأسطر باستخدام محرف الهاش. يمكن تحديد هذا الخيار أكثر من مرة.
يطبق خيار --strip-unneeded-symbol على كل رمز مذكور في الملف filename. الملف filename هو ببساطة ملف مسطح، يحتوي على اسم رمز واحد في كل سطر. يمكن كتابة تعليقات الأسطر باستخدام محرف الهاش. يمكن تحديد هذا الخيار أكثر من مرة.
يطبق خيار --keep-global-symbol على كل رمز مذكور في الملف filename. الملف filename هو ببساطة ملف مسطح، يحتوي على اسم رمز واحد في كل سطر. يمكن كتابة تعليقات الأسطر باستخدام محرف الهاش. يمكن تحديد هذا الخيار أكثر من مرة.
يطبق خيار --localize-symbol على كل رمز مذكور في الملف filename. الملف filename هو ببساطة ملف مسطح، يحتوي على اسم رمز واحد في كل سطر. يمكن كتابة تعليقات الأسطر باستخدام محرف الهاش. يمكن تحديد هذا الخيار أكثر من مرة.
يطبق خيار --globalize-symbol على كل رمز مذكور في الملف filename. الملف filename هو ببساطة ملف مسطح، يحتوي على اسم رمز واحد في كل سطر. يمكن كتابة تعليقات الأسطر باستخدام محرف الهاش. يمكن تحديد هذا الخيار أكثر من مرة. ملاحظة: لا يمكن استخدام هذا الخيار بالتزامن مع الخيارين -G أو --keep-global-symbol.
طبق خيار --weaken-symbol على كل رمز مدرج في الملف filename. الملف filename هو ببساطة ملف مسطح، مع اسم رمز واحد في كل سطر. يمكن تقديم تعليقات الأسطر باستخدام علامة المربع. يمكن إعطاء هذا الخيار أكثر من مرة.
إذا كانت بنية المخرجات تحتوي على رموز آلة بديلة، فاستخدم الرمز رقم index بدلاً من الرمز المبدئي. هذا مفيد في حالة تخصيص رمز رسمي لآلة ما واعتماد سلسلة الأدوات للرمز الجديد، بينما لا تزال التطبيقات الأخرى تعتمد على استخدام الرمز الأصلي. بالنسبة للبنيات القائمة على ELF، إذا لم يكن البديل index موجودًا، فستُعامل القيمة كعدد مطلق ليُخزن في حقل e_machine في ترويسة ELF.
ميز نص المخرجات كقابل للكتابة. هذا الخيار ليس ذا معنى لجميع تنسيقات ملفات الكائنات.
اجعل نص المخرجات محميًا من الكتابة. هذا الخيار ليس ذا معنى لجميع تنسيقات ملفات الكائنات.
ميز ملف المخرجات كملف بتبويب عند الطلب. هذا الخيار ليس ذا معنى لجميع تنسيقات ملفات الكائنات.
ميز ملف المخرجات كغير نقي. هذا الخيار ليس ذا معنى لجميع تنسيقات ملفات الكائنات.
أضف البادئة string لكل الرموز في ملف المخرجات.
أضف البادئة string لكل أسماء الأقسام في ملف المخرجات.
أضف البادئة string لكل أسماء جميع الأقسام المخصصة في ملف المخرجات.
ينشئ قسم .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.

طالما نُصب ملف معلومات التنقيح في أحد هذه المواقع قبل تشغيل منقح الأخطاء، فيجب أن يعمل كل شيء بشكل صحيح.

عند تجريد ملف، ربما باستخدام --strip-debug أو --strip-unneeded، احتفظ بأي رموز تحدد أسماء الأقسام، والتي كانت ستُجرد لولا ذلك.
عند تجريد ملف، ربما باستخدام --strip-debug أو --strip-unneeded، احتفظ بأي رموز تحدد أسماء ملفات المصدر، والتي كانت ستُجرد لولا ذلك.
جرد ملفًا، مع إزالة محتويات أي أقسام لن تُجرد بواسطة --strip-debug وترك أقسام التنقيح سليمة. في ملفات ELF، يحافظ هذا على جميع أقسام الملاحظات في المخرجات.

ملاحظة - يُحافظ على ترويسات الأقسام للأقسام المجردة، بما في ذلك أحجامها، ولكن يتم التخلص من محتويات القسم. يُحافظ على ترويسات الأقسام لتمكين الأدوات الأخرى من مطابقة ملف معلومات التنقيح مع الملف التنفيذي الحقيقي، حتى لو نُقل ذلك الملف التنفيذي إلى مساحة عناوين مختلفة.

القصد هو استخدام هذا الخيار بالاشتراك مع --add-gnu-debuglink لإنشاء ملف تنفيذي من جزأين. الأول ثنائي مجرد يشغل مساحة أقل في ذاكرة الوصول العشوائي وفي التوزيعة، والثاني ملف معلومات تنقيح لا يُحتاج إليه إلا إذا كانت قدرات التنقيح مطلوبة. الإجراء المقترح لإنشاء هذه الملفات هو كما يلي:

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 تدعم حاليًا وجود اسم ملف واحد فقط يحتوي على معلومات التنقيح، وليس عدة أسماء ملفات على أساس ملف لكل كائن.

أزل محتويات جميع أقسام DWARF .dwo، مع ترك أقسام التنقيح المتبقية وجميع الرموز سليمة. هذا الخيار مخصص للاستخدام من قبل المترجم كجزء من خيار -gsplit-dwarf، الذي يفصل معلومات التنقيح بين ملف .o وملف .dwo منفصل. ينتج المترجم كل معلومات التنقيح في نفس الملف، ثم يستخدم خيار --extract-dwo لنسخ أقسام .dwo إلى ملف .dwo، ثم خيار --strip-dwo لإزالة تلك الأقسام من ملف .o الأصلي.
استخرج محتويات جميع أقسام DWARF .dwo. انظر خيار --strip-dwo لمزيد من المعلومات.
حدد محاذاة الملف. ستبدأ الأقسام في الملف دائمًا عند إزاحات ملف تكون مضاعفات لهذا العدد. القيمة المبدئية هي 512. [هذا الخيار خاص بأهداف PE.]
حدد عدد بايتات الذاكرة المراد احتياطها (وإيداعها اختياريًا) لتُستخدم ككومة لهذا البرنامج. [هذا الخيار خاص بأهداف PE.]
استخدم value كعنوان أساس لبرنامجك أو dll. هذا هو أدنى موقع ذاكرة سيُستخدم عند تحميل برنامجك أو dll. لتقليل الحاجة إلى نقل وتحسين أداء ملفات dll الخاصة بك، يجب أن يكون لكل منها عنوان أساس فريد ولا يتداخل مع أي dlls أخرى. القيمة المبدئية هي 0x400000 للملفات التنفيذية، و 0x10000000 لملفات dll. [هذا الخيار خاص بأهداف PE.]
[هذا الخيار خاص بأهداف PE.]

يضبط حقل محاذاة القسم في ترويسة PE - إذا كانت موجودة في الملف الثنائي. ستبدأ الأقسام في الذاكرة دائمًا عند عناوين تكون مضاعفة لهذا العدد. القيمة المبدئية هي 0x1000.

ملاحظة - إذا لم تعد عناوين LMA أو VMA لقسم ما محاذية، ولم تُضبط تلك العناوين عبر خيارات --set-section-lma أو --set-section-vma، ونُقل الملف بالكامل، فسيُصدر إشعار تحذيري. سيعود الأمر حينها للمستخدم ليقرر ما إذا كانت LMA و VMA بحاجة إلى تحديث.

حدد عدد بايتات الذاكرة المراد احتياطها (وإيداعها اختياريًا) لتُستخدم ككدسة لهذا البرنامج. [هذا الخيار خاص بأهداف PE.]
يحدد النظام الفرعي الذي سيُنفذ برنامجك تحته. القيم القانونية لـ أي هي "native"، و "windows"، و "console"، و "posix"، و "efi-app"، و "efi-bsd"، و "efi-rtd"، و "sal-rtd"، و "xbox". يمكنك اختياريًا ضبط إصدار النظام الفرعي أيضًا. تُقبل القيم العددية أيضًا لـ أي. [هذا الخيار خاص بأهداف PE.]
احتفظ بأعلام أقسام الملف ورموزه ولكن أزل جميع بيانات الأقسام. تحديدًا، هذا الخيار:
  • يُزيل محتويات جميع الأقسام.
  • يضبط حجم كل قسم على الصفر.
  • يضبط عنوان بدء الملف على الصفر.

يُستخدم هذا الخيار لبناء ملف .sym لنواة VxWorks. يمكن أن يكون أيضًا وسيلة مفيدة لتقليل حجم ملف مدخلات الرابط --just-symbols.

يضغط أقسام تنقيح DWARF باستخدام zlib مع SHF_COMPRESSED من ELF ABI. ملاحظة - إذا كان الضغط سيجعل القسم أكبر بالفعل، فلن يُضغط.
بالنسبة لملفات 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. ملاحظة - إذا كان الضغط سيجعل القسم أكبر بالفعل، فلن يُضغط ولن يُعاد تسميته.
يفك ضغط أقسام تنقيح DWARF. بالنسبة لقسم .zdebug، يُستعاد الاسم الأصلي.
بالنسبة لملفات ELF، تتحكم هذه الخيارات فيما إذا كان يجب تحويل الرموز المشتركة إلى النوع "STT_COMMON" أو النوع "STT_OBJECT". يُحوّل --elf-stt-common=yes نوع الرمز المشترك إلى "STT_COMMON". بينما يُحوّل --elf-stt-common=no نوع الرمز المشترك إلى "STT_OBJECT".
بالنسبة لملفات ELF، حاوِل (أو لا تحاول) تقليل حجم أي أقسام من نوع SHT_NOTE عن طريق إزالة الملاحظات المكررة.
أظهر رقم إصدار objcopy.
لمخرجات Verilog، يتحكم هذا الخيار في عدد البايتات المحولة لكل عنصر بيانات مخرجات. يتحكم هدف المدخلات في ترتيب البايتات (endianness) للتحويل.
مخرجات مسهبة: اسرد جميع ملفات الكائنات التي عُدّلت. في حالة الأرشيفات، يسرد objcopy -V جميع أعضاء الأرشيف.
أظهر ملخصًا لخيارات objcopy.
اعرض قائمة توضح جميع المعماريات وتنسيقات الكائنات المتاحة.
@الملف
اقرأ خيارات سطر الأوامر من file. تُدرج الخيارات المقروءة مكان خيار @file الأصلي. إذا كان file غير موجود، أو لا يمكن قراءته، فسيُعامل الخيار حرفيًا ولن يُزال.

تُفصل الخيارات في file بمسافات فارغة. يمكن تضمين حرف مسافة فارغة في خيار ما عن طريق إحاطة الخيار بالكامل إما بعلامات اقتباس مفردة أو مزدوجة. يمكن تضمين أي حرف (بما في ذلك الشرطة المائلة العكسية) عن طريق سبق الحرف المراد تضمينه بشرطة مائلة عكسية. يمكن لـ file نفسه أن يحتوي على خيارات @file إضافية؛ وتُعالج أي خيارات من هذا القبيل بشكل متكرر.

انظر أيضًا

ld(1)، و objdump(1)، ومدخلات Info لـ binutils.

حقوق النسخ

حقوق الطبع والنشر (c) لعام 1991-2026 لمؤسسة البرمجيات الحرة، المحدودة.

يُمنح الإذن بنسخ وتوزيع و/أو تعديل هذا المستند بموجب شروط رخصة جنو للوثائق الحرة (GNU Free Documentation License)، الإصدار 1.3 أو أي إصدار لاحق تنشره مؤسسة البرمجيات الحرة؛ مع عدم وجود أقسام ثابتة، وبدون نصوص غلاف أمامي، وبدون نصوص غلاف خلفي. نُسخة من الرخصة مضمنة في القسم المعنون "GNU Free Documentation License".

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.

9 فبراير 2026 binutils-2.46