LLVM-OBJCOPY(1) LLVM LLVM-OBJCOPY(1)

llvm-objcopy - ابزاری برای رونویسی و ویرایش فایل‌های شیء

llvm-objcopy [options] input [output]

llvm-objcopy ابزاری برای رونویسی و دستکاری شیءها (objects) است. در کاربرد اولیه، این ابزار یک کپی معنایی از ورودی به خروجی ایجاد می‌کند. در صورت مشخص شدن هر گزینه‌ای، ممکن است خروجی در طول فرآیند دستخوش تغییر شود، مانند حذف کردن بخش‌ها (sections).

اگر هیچ فایل خروجی مشخص نشود، فایل ورودی درجا (in-place) اصلاح می‌شود. اگر مقدار "-" برای فایل ورودی تعیین شود، ورودی از جریان ورودی استاندارد برنامه خوانده می‌شود. اگر مقدار "-" برای فایل خروجی تعیین شود، خروجی در جریان خروجی استاندارد برنامه نوشته خواهد شد.

اگر ورودی یک آرشیو باشد، هرگونه عملیات درخواستی بر روی تک‌تک اعضای آرشیو به صورت جداگانه اعمال خواهد شد.

این ابزار همچنان در حال توسعه فعال است، اما در بیشتر سناریوها به عنوان جایگزینی مستقیم (drop-in) برای objcopy متعلق به گنو عمل می‌کند.

گزینه‌های زیر یا مستقل از قالب فایل هستند و یا بر چندین قالب مختلف فایل اعمال می‌شوند.

افزودن بخش .gnu_debuglink برای <debug-file> به خروجی.
افزودن بخشی به نام <section> با محتوای فایل <file> به خروجی. برای شیءهای ELF، اگر نام بخش با ".note" آغاز شود از نوع SHT_NOTE خواهد بود؛ در غیر این صورت از نوع SHT_PROGBITS خواهد بود. این گزینه را می‌توان چندین بار برای افزودن چندین بخش تکرار کرد.

برای شیءهای MachO، مقدار <section> باید در قالب <segment name>,<section name> مشخص شود.

برای سازگاری نادیده گرفته می‌شود.
استفاده از مقادیر واقعی برای UIDها، GIDها و برچسب‌های زمانی هنگام به‌روزرسانی سرایندهای اعضای آرشیو.
حذف بیشتر نمادهای محلی که در بازنشانی‌ها (relocations) به آن‌ها ارجاع داده نشده است از خروجی. قالب‌های مختلف فایل ممکن است این عمل را به زیرمجموعه‌ای از نمادهای محلی محدود کنند. برای نمونه، نمادهای فایل و بخش در شیءهای ELF دور انداخته نخواهند شد. علاوه بر این، تمام بخش‌های اشکال‌زدایی (debug) نیز حذف می‌شوند.
تخلیه محتوای بخش <section> درون فایل <file>. می‌تواند چندین بار برای تخلیه بخش‌های مختلف در فایل‌های مجزا مشخص شود. <file> به فایل‌های ورودی و خروجی داده‌شده به llvm-objcopy مرتبط نیست و بنابراین عملیات عادی رونویسی و ویرایش همچنان انجام خواهد شد. پیش از تخلیه، هیچ عملیاتی روی بخش‌ها صورت نمی‌گیرد.

برای شیءهای MachO، مقدار <section> باید به صورت <segment name>,<section name> قالب‌بندی شود.

فعال‌سازی حالت قطعی (deterministic) هنگام رونویسی آرشیوها؛ به این معنی که برای فیلدهای UID، GID و برچسب زمانی سرایند اعضای آرشیو از مقدار 0 استفاده می‌شود. به طور پیش‌فرض فعال است.
استخراج بخش مشخص‌شده <section> درون فایل <file> به عنوان یک شیء مجزا. می‌تواند چندین بار برای استخراج چندین بخش تکرار شود. <file> به فایل‌های ورودی و خروجی داده‌شده به llvm-objcopy مرتبط نیست و بنابراین عملیات عادی رونویسی و ویرایش همچنان انجام خواهد گرفت. پیش از تخلیه، هیچ عملیاتی روی بخش‌ها اعمال نمی‌شود.
علامت‌گذاری تمام نمادهای تعریف‌شده با نام <symbol> به عنوان نماد سراسری (global) در خروجی. می‌تواند چندین بار برای علامت‌گذاری چندین نماد مشخص شود.
خواندن فهرستی از نام‌ها از فایل <filename> و علامت‌گذاری نمادهای تعریف‌شده با آن نام‌ها به عنوان سراسری در خروجی. در فایل، هر خط نشان‌دهنده یک نماد منفرد است که فاصله‌های خالی ابتدایی و انتهایی و همچنین تمام موارد پس از '#' نادیده گرفته می‌شوند. می‌تواند چندین بار برای خواندن نام‌ها از فایل‌های مختلف تکرار شود.
چاپ خلاصه‌ای از گزینه‌های خط فرمان.
محلی (local) کردن تمام نمادها در خروجی، به جز نمادهایی با نام <symbol>. می‌تواند چندین بار برای استثنا کردن چندین نماد تکرار شود.
محلی کردن تمام نمادها در خروجی، به جز نمادهایی که نامشان در فایل <filename> آمده است. در فایل، هر خط نشان‌دهنده یک نماد است که فاصله‌های خالی ابتدا و انتها و همچنین هر چیزی پس از '#' نادیده گرفته می‌شود. می‌تواند چندین بار برای خواندن نام‌ها از فایل‌های متعدد مشخص شود.
علامت‌گذاری هر نماد تعریف‌شده غیرمشترک (non-common) با نام <symbol> به عنوان یک نماد محلی در خروجی. می‌تواند چندین بار برای محلی کردن چندین نماد تکرار شود.
خواندن فهرستی از نام‌ها از فایل <filename> و محلی علامت‌گذاری کردن نمادهای تعریف‌شده غیرمشترک با آن نام‌ها در خروجی. در فایل، هر خط بیانگر یک نماد است که فاصله‌های خالی ابتدا و انتهای آن و همچنین موارد بعد از '#' نادیده گرفته می‌شوند. می‌تواند چندین بار برای خواندن نام‌ها از چندین فایل مشخص شود.
تولید یک فایل اشکال‌زدایی در خروجی که فقط محتوای بخش‌های مفید برای اهداف اشکال‌زدایی را حفظ می‌کند.

برای شیءهای ELF، این گزینه محتوای بخش‌های SHF_ALLOC را که از نوع SHT_NOTE نیستند با تبدیل آن‌ها به SHT_NOBITS حذف کرده و تا حد امکان سرایندهای برنامه را جمع‌وجور می‌کند.

--only-section <section>, -j حذف تمام بخش‌ها از خروجی، به‌جز بخش‌هایی با نام <section>. برای نگه‌داشتن چندین بخش، می‌توان این گزینه را چند بار مشخص کرد.

برای اشیاء MachO، عبارت <section> باید به صورت <segment name>,<section name> قالب‌بندی شود.

تغییر نام نمادهای موسوم به <old> به <new> در خروجی. برای تغییر نام چندین نماد، می‌توان این گزینه را چند بار مشخص کرد.
تغییر نام نمادها در خروجی طبق توضیحات داده شده در فایل <filename>. در این فایل، هر خط نشان‌دهندهٔ یک نماد برای تغییر نام است، که در آن نام قدیمی و نام جدید با فاصله (whitespace) از یکدیگر جدا شده‌اند. فاصله‌های ابتدایی و انتهایی و همچنین هر متنی پس از '#' نادیده گرفته می‌شوند. برای خواندن نام‌ها از چندین فایل، می‌توان این گزینه را چند بار مشخص کرد.
در صورت تعیین، نام‌های نماد و بخش که توسط سوئیچ‌های دیگر مشخص می‌شوند به عنوان الگوهای عبارت منظم گسترش‌یافتهٔ POSIX در نظر گرفته می‌شوند.
حذف <prefix> از ابتدای نام تمام نمادها. برای نمادهایی که با <prefix> شروع نمی‌شوند، هیچ عملیاتی انجام نمی‌شود (No-op).
حذف بخش مشخص‌شده از خروجی. برای حذف هم‌زمان چندین بخش، می‌توان این گزینه را چند بار مشخص کرد.

برای اشیاء MachO، عبارت <section> باید به صورت <segment name>,<section name> قالب‌بندی شود.

تنظیم هم‌ترازی بخش <section> روی مقدار <align>. برای به‌روزرسانی چندین بخش، می‌توان این گزینه را چند بار مشخص کرد.
تنظیم ویژگی‌های بخش در خروجی برای بخش <section> بر اساس مقادیر مشخص‌شدهٔ <flag>. برای به‌روزرسانی چندین بخش، می‌توان این گزینه را چند بار مشخص کرد.

نام‌های پرچم پشتیبانی‌شده عبارتند از alloc، load، noload، readonly، exclude، debug، code، data، rom، share، contents، merge، strings و large. همهٔ پرچم‌ها برای تمامی قالب‌های فایل شیء یا معماری‌های مقصد معنادار نیستند.

برای اشیاء ELF، پرچم‌ها اثرات زیر را دارند:

  • alloc = افزودن پرچم SHF_ALLOC.
  • load = اگر بخش دارای نوع SHT_NOBITS باشد، آن را به عنوان یک بخش SHT_PROGBITS علامت‌گذاری می‌کند.
  • readonly = اگر این پرچم مشخص نشود، پرچم SHF_WRITE افزوده می‌شود.
  • exclude = افزودن پرچم SHF_EXCLUDE.
  • code = افزودن پرچم SHF_EXECINSTR.
  • merge = افزودن پرچم SHF_MERGE.
  • strings = افزودن پرچم SHF_STRINGS.
  • contents = اگر بخش دارای نوع SHT_NOBITS باشد، آن را به عنوان یک بخش SHT_PROGBITS علامت‌گذاری می‌کند.
  • large = افزودن پرچم SHF_X86_64_LARGE در معماری x86_64؛ در صورتی که معماری مقصد x86_64 نباشد، رد می‌شود.

برای اشیاء COFF، پرچم‌ها اثرات زیر را دارند:

  • alloc = افزودن پرچم‌های IMAGE_SCN_CNT_UNINITIALIZED_DATA و IMAGE_SCN_MEM_READ، مگر اینکه پرچم load مشخص شده باشد.
  • noload = افزودن پرچم‌های IMAGE_SCN_LNK_REMOVE و IMAGE_SCN_MEM_READ.
  • readonly = اگر این پرچم مشخص نشود، پرچم IMAGE_SCN_MEM_WRITE افزوده می‌شود.
  • exclude = افزودن پرچم‌های IMAGE_SCN_LNK_REMOVE و IMAGE_SCN_MEM_READ.
  • debug = افزودن پرچم‌های IMAGE_SCN_CNT_INITIALIZED_DATA، IMAGE_SCN_MEM_DISCARDABLE و IMAGE_SCN_MEM_READ.
  • code = افزودن پرچم‌های IMAGE_SCN_CNT_CODE، IMAGE_SCN_MEM_EXECUTE و IMAGE_SCN_MEM_READ.
  • data = افزودن پرچم‌های IMAGE_SCN_CNT_INITIALIZED_DATA و IMAGE_SCN_MEM_READ.
  • share = افزودن پرچم‌های IMAGE_SCN_MEM_SHARED و IMAGE_SCN_MEM_READ.
عدم تغییر پارامترهای نماد <symbol> هنگام اجرای سایر گزینه‌هایی که می‌توانند نام، پیونددهی یا قابلیت مشاهدهٔ نماد را تغییر دهند.
عدم تغییر پارامترهای نمادهای نام‌برده در فایل <filename> هنگام اجرای سایر گزینه‌هایی که می‌توانند نام، پیونددهی یا قابلیت مشاهدهٔ نماد را تغییر دهند. در این فایل، هر خط نشان‌دهندهٔ یک نماد است و فاصله‌های ابتدایی و انتهایی و همچنین هر متنی پس از '#' نادیده گرفته می‌شوند. برای خواندن نام‌ها از چندین فایل، می‌توان این گزینه را چند بار مشخص کرد.
حذف تمام نمادها، بخش‌های اشکال‌زدایی و بازآرایی‌ها از خروجی. این گزینه معادل سوئیچ --strip-all در ابزار GNU objcopy است.
برای اشیاء ELF، حذف تمام نمادها و بخش‌های غیرقابل‌تخصیص (non-alloc) خارج از سگمنت‌ها از خروجی، به‌جز بخش‌های .gnu.warning، .ARM.attribute و جدول نام بخش‌ها.

برای اشیاء COFF و Mach-O، حذف تمام نمادها، بخش‌های اشکال‌زدایی و بازآرایی‌ها از خروجی.

حذف تمام بخش‌های اشکال‌زدایی از خروجی.
حذف تمام نمادهای موسوم به <symbol> از خروجی. برای حذف چندین نماد، می‌توان این گزینه را چند بار مشخص کرد.
حذف تمام نمادهایی که نام آن‌ها در فایل <filename> آمده است، از خروجی. در این فایل، هر خط نشان‌دهندهٔ نام یک نماد است و فاصله‌های ابتدایی و انتهایی و همچنین هر متنی پس از '#' نادیده گرفته می‌شوند. برای خواندن نام‌ها از چندین فایل، می‌توان این گزینه را چند بار مشخص کرد.
حذف تمام نمادهای موسوم به <symbol> از خروجی در صورتی که محلی یا تعریف‌نشده باشند و توسط هیچ بازآرایی نیاز نباشند.
حذف تمام نمادهایی که نام آن‌ها در فایل <filename> آمده است از خروجی، در صورتی که محلی یا تعریف‌نشده باشند و توسط هیچ بازآرایی نیاز نباشند. در این فایل، هر خط نشان‌دهندهٔ نام یک نماد است و فاصله‌های ابتدایی و انتهایی و همچنین هر متنی پس از '#' نادیده گرفته می‌شوند. برای خواندن نام‌ها از چندین فایل، می‌توان این گزینه را چند بار مشخص کرد.
حذف تمام نمادهای محلی یا تعریف‌نشده که توسط بازآرایی‌ها نیاز نیستند از خروجی. همچنین تمام بخش‌های اشکال‌زدایی را حذف می‌کند.
--update-section <name>=<file> محتوای بخش <name> را با محتوای فایل <file> جایگزین می‌کند. اگر بخش <name> بخشی از یک قطعه (segment) باشد، محتوای جدید نمی‌تواند بزرگ‌تر از بخش موجود باشد.
نسخهٔ فایل اجرایی llvm-objcopy را نمایش می‌دهد.
نحو نویسه‌های عام (wildcard) را برای پرچم‌های مربوط به نمادها فعال می‌کند. به‌طور پیش‌فرض برای پرچم‌های مربوط به بخش‌ها فعال است. با --regex ناسازگار است.

نحو نویسه‌های عام نمادهای ویژهٔ زیر را مجاز می‌داند:

نویسه معنی معادل
* هر تعداد نویسه .*
? هر تک‌نویسه .
\ گریز دادن نویسهٔ بعدی \
[a-z] کلاس نویسه [a-z]
[!a-z], [^a-z] کلاس نویسهٔ نفی‌شده [^a-z]

علاوه بر این، آغاز شدن یک نویسهٔ عام با '!' از تطابق جلوگیری می‌کند، حتی اگر پرچم دیگری تطبیق داشته باشد. برای مثال -w -N '*' -N '!x' همهٔ نمادها را به جز x پاکسازی (strip) خواهد کرد.

ترتیب نویسه‌های عام اهمیتی ندارد. برای نمونه، -w -N '*' -N '!x' معادل -w -N '!x' -N '*' است.

@<FILE>
گزینه‌ها و دستورهای خط فرمان را از فایل پاسخ <FILE> می‌خواند.

گزینه‌های زیر تنها برای اشیای ELF پیاده‌سازی شده‌اند. در صورت استفاده با سایر اشیا، llvm-objcopy یا خطایی صادر می‌کند یا بدون اخطار از آن‌ها چشم‌پوشی می‌نماید.

یک نماد جدید به نام <name> با مقدار <value> در بخشی به نام <section> به جدول نمادهای خروجی اضافه می‌کند. اگر <section> مشخص نشده باشد، نماد به عنوان یک نماد مطلق (absolute) افزوده می‌شود. <flags> بر ویژگی‌های نماد اثر می‌گذارند. مقادیر پذیرفته‌شده عبارتند از:
  • global = نماد دارای پیوند سراسری خواهد بود.
  • local = نماد دارای پیوند محلی خواهد بود.
  • weak = نماد دارای پیوند ضعیف خواهد بود.
  • default = نماد دارای پدیداری پیش‌فرض خواهد بود.
  • hidden = نماد دارای پدیداری مخفی خواهد بود.
  • protected = نماد دارای پدیداری محافظت‌شده خواهد بود.
  • file = نماد از نوع STT_FILE خواهد بود.
  • section = نماد از نوع STT_SECTION خواهد بود.
  • object = نماد از نوع STT_OBJECT خواهد بود.
  • function = نماد از نوع STT_FUNC خواهد بود.
  • indirect-function = نماد از نوع STT_GNU_IFUNC خواهد بود.

علاوه بر این، پرچم‌های روبرو پذیرفته می‌شوند اما نادیده گرفته خواهند شد: debug، constructor، warning، indirect، synthetic، unique-object، before.

می‌توان چندین بار برای افزودن نمادهای متعدد مشخص کرد.

به llvm-objcopy اجازه می‌دهد بخش‌ها را حذف کند حتی اگر به ارجاعات نامعتبر به بخش‌ها منجر شود. هر فیلد نامعتبر sh_link روی صفر تنظیم خواهد شد.
مقدار LMA سگمنت‌های با اندازه غیرصفر را به میزان <val> جابه‌جا می‌کند.
نشانی بخش‌هایی را که با الگوی <section> مطابقت دارند به مقدار مشخص‌شده تغییر می‌دهد، یا +<val>/-<val> را بر مقدار کنونی اعمال می‌کند. می‌توان چندین بار برای مشخص کردن چندین الگو از آن استفاده کرد. هر بخش تنها توسط یک آرگومان --change-section-address تغییر می‌یابد. اگر نام یک بخش با چند الگو مطابقت داشته باشد، راست‌ترین (آخرین) تغییر اعمال می‌شود. فایل شیء باید از نوع ET_REL باشد.
مقدار <incr> را به نشانی شروع برنامه اضافه می‌کند. می‌توان چندین بار از آن استفاده کرد، که در این حالت مقادیر به صورت تجمعی اعمال می‌شوند.
بخش‌های اشکال‌زدایی DWARF را در خروجی، با استفاده از قالب مشخص‌شده فشرده می‌کند. قالب‌های پشتیبانی‌شده zlib و zstd هستند. اگر <format> ذکر نشود، از zlib استفاده می‌شود.
بخش‌های منطبق بر <section> را با قالب مشخص‌شده فشرده یا از حالت فشرده خارج می‌کند. قالب‌های پشتیبانی‌شده zlib و zstd هستند. برای خارج کردن از حالت فشرده مقدار none را مشخص کنید. اگر بخشی با چندین گزینه مطابقت داشته باشد، آخرین گزینه پیروز است. نویسه عام <section> که با '!' آغاز شود مجاز نیست. بخش‌های درون یک سگمنت قابل فشرده‌سازی یا خروج از حالت فشرده نیستند.
تمام بخش‌های اشکال‌زدایی فشرده‌شده DWARF را در خروجی از حالت فشرده خارج می‌کند.
نمادهای محلی را که با ".L" آغاز می‌شوند و بازنشانی‌ها (relocations) به آن‌ها ارجاع نداده‌اند، از خروجی حذف می‌کند.
تمام بخش‌هایی را که بخش‌های .dwo از نوع DWARF نیستند، از خروجی حذف می‌کند.
پارتیشن اصلی را از خروجی استخراج می‌کند.
پارتیشن نام‌برده‌شده را از خروجی استخراج می‌کند.
برای خروجی‌های باینری، فاصله‌های خالی میان بخش‌ها را به جای صفر با <value> پر می‌کند. این مقدار باید یک عدد صحیح ۸ بیتی بدون علامت باشد.
ورودی را با قالب مشخص‌شده می‌خواند. برای فهرستی از مقادیر معتبر <format> به بخش قالب‌های پشتیبانی‌شده (SUPPORTED FORMATS) مراجعه کنید. در صورت مشخص نشدن، llvm-objcopy تلاش خواهد کرد قالب را به صورت خودکار تشخیص دهد.
نمادهای از نوع STT_FILE را حفظ می‌کند، حتی اگر در غیر این صورت حذف می‌شدند.
هنگام حذف بخش‌ها از خروجی، بخش‌های نام‌برده‌شده با <section> را حذف نمی‌کند. می‌تواند چندین بار برای نگه داشتن چندین بخش مشخص شود.
هنگام حذف نمادها از خروجی، نمادهای نام‌برده‌شده با <symbol> را حذف نمی‌کند. می‌تواند چندین بار برای نگه داشتن چندین نماد مشخص شود.
هنگام حذف نمادها از خروجی، نمادهای نام‌برده‌شده در فایل <filename> را حذف نمی‌کند. در این فایل، هر خط بیانگر یک نماد منفرد است که فاصله‌های ابتدایی و انتهایی آن و همچنین هر آنچه پس از '#' بیاید نادیده گرفته می‌شود. می‌تواند چندین بار برای خواندن نام‌ها از فایل‌های متعدد مشخص شود.
تمام نمادهای با پدیداری مخفی (hidden) یا داخلی (internal) را در خروجی به صورت محلی (local) علامت‌گذاری می‌کند.
پدیداری نمادهایی را که به هنگام استفاده از ورودی باینری یا --add-symbol به طور خودکار ایجاد می‌شوند، تعیین می‌کند. گزینه‌های معتبر عبارتند از:
  • default
  • hidden
  • internal
  • protected

حالت پیش‌فرض default است.

هنگام اضافه کردن بخش‌های یادداشت (note sections)، معتبر بودن قالب بخش بررسی نمی‌شود.
خروجی را در قالب مشخص‌شده می‌نویسد. برای فهرستی از مقادیر معتبر <format> به بخش قالب‌های پشتیبانی‌شده (SUPPORTED FORMATS) مراجعه کنید. در صورت مشخص نشدن، قالب خروجی همان مقدار تعیین‌شده برای --input-target در نظر گرفته می‌شود یا اگر آن گزینه نیز مشخص نشده باشد، برابر با قالب فایل ورودی خواهد بود.
--pad-to <address> برای خروجی‌های دودویی (binary)، خروجی را با استفاده از مقدار صفر یا مقدار مشخص‌شده توسط --gap-fill تا نشانی بارگذاری <address> پر (pad) می‌کند.
مقدار <prefix> را به ابتدای نام تمام بخش‌های تخصیص‌پذیر در خروجی اضافه می‌کند.
مقدار <prefix> را به ابتدای نام تمام نمادها در خروجی اضافه می‌کند.
مُهرهای زمانی دسترسی و تغییر را در خروجی حفظ می‌کند.
یادداشت‌های (notes) با نوع عدد صحیح <type> و نام <name> را از بخش‌های SHT_NOTE که در یک قطعه (segment) قرار ندارند، حذف می‌کند. می‌تواند چندین بار مشخص شود.
بخش‌های با نام <old> را در خروجی به <new> تغییر نام می‌دهد، و هرگونه مقادیر مشخص‌شده برای <flag> را اعمال می‌کند. برای فهرستی از پرچم‌های پشتیبانی‌شده، --set-section-flags را ببینید. می‌تواند چندین بار برای تغییر نام چندین بخش مشخص شود.
نوع بخش <section> را روی مقدار عدد صحیح <type> تنظیم می‌کند. می‌تواند چندین بار برای به‌روزرسانی چندین بخش مشخص شود.
نشانی آغازین خروجی را روی <addr> تنظیم می‌کند. بر هر گزینه قبلی --change-start یا --adjust-start اولویت دارد.
دید (visibility) یک نماد را به مقدار مشخص‌شده تغییر می‌دهد.
فهرستی از نمادها را از <filename> خوانده و دید (visibility) آن‌ها را به مقدار مشخص‌شده تغییر می‌دهد. مقادیر دید: default، internal، hidden، protected.
معادل اجرای llvm-objcopy با --extract-dwo و <dwo-file> به عنوان فایل خروجی بدون هیچ گزینه دیگری، و سپس اجرای آن با --strip-dwo روی فایل ورودی است.
تمام بخش‌های DWARF .dwo را از خروجی حذف می‌کند.
تمام بخش‌های غیرقابل‌تخصیص را که درون قطعه‌ها (segments) قرار ندارند، از خروجی حذف می‌کند.
تمام سرایندهای بخش و تمام داده‌های بخش‌هایی را که درون قطعه‌ها (segments) نیستند، از خروجی حذف می‌کند. توجه داشته باشید که بسیاری از ابزارها قادر به استفاده از یک شیء (object) بدون سرایندهای بخش نخواهند بود.
معادل گزینه‌های --input-target و --output-target برای قالب مشخص‌شده است. برای فهرستی از مقادیر معتبر <format>، به SUPPORTED FORMATS مراجعه کنید.
هنگام افزودن بخش‌های یادداشت، معتبر بودن قالب بخش را بررسی می‌کند. به‌طور پیش‌فرض فعال است.
--weaken-symbol <symbol>, -W
نمادهای سراسری با نام <symbol> را در خروجی به عنوان نماد ضعیف (weak) علامت‌گذاری می‌کند. می‌تواند چندین بار برای ضعیف علامت‌گذاری کردن چند نماد مشخص شود.
--weaken-symbols <filename>
فهرستی از نام‌ها را از فایل <filename> خوانده و نمادهای سراسری با آن نام‌ها را در خروجی به عنوان ضعیف علامت‌گذاری می‌کند. در فایل، هر خط نشان‌دهنده یک نماد منفرد است که فاصله‌های خالی ابتدا و انتهای آن و همچنین هر آنچه پس از یک '#' بیاید نادیده گرفته می‌شود. می‌تواند چندین بار برای خواندن نام‌ها از چندین فایل مشخص شود.
تمام نمادهای سراسری تعریف‌شده را در خروجی به عنوان ضعیف (weak) علامت‌گذاری می‌کند.
نمادهای تعریف‌نشده را حفظ می‌کند، حتی اگر در غیر این صورت حذف (strip) می‌شدند.

زیرسیستم PE و در صورت تمایل نسخهٔ زیرسیستم را تعیین می‌کند.

مقادیر زیر در حال حاضر توسط llvm-objcopy برای گزینه‌های --input-target، --output-target و --target پشتیبانی می‌شوند. برای سازگاری با GNU objcopy، تمامی این مقادیر از نوع bfdname هستند.

  • binary
  • ihex
  • elf32-i386
  • elf32-x86-64
  • elf64-x86-64
  • elf32-iamcu
  • elf32-littlearm
  • elf64-aarch64
  • elf64-littleaarch64
  • elf32-littleriscv
  • elf64-littleriscv
  • elf32-powerpc
  • elf32-powerpcle
  • elf64-powerpc
  • elf64-powerpcle
  • elf32-bigmips
  • elf32-ntradbigmips
  • elf32-ntradlittlemips
  • elf32-tradbigmips
  • elf32-tradlittlemips
  • elf64-tradbigmips
  • elf64-tradlittlemips
  • elf32-sparc
  • elf32-sparcel
  • elf32-hexagon
  • elf32-loongarch
  • elf64-loongarch
  • elf64-s390

قالب‌های زیر توسط llvm-objcopy تنها برای گزینهٔ --output-target پشتیبانی می‌شوند:

•
srec

علاوه بر این، تمام هدف‌ها به‌جز binary، ihex و srec می‌توانند پسوند -freebsd داشته باشند..SH "ورودی و خروجی باینری (BINARY INPUT AND OUTPUT)"

اگر binary به عنوان مقدار برای --input-target استفاده شود، فایل ورودی به عنوان یک بخش داده درون یک شیء جابجایی‌پذیر ELF جاسازی خواهد شد، به‌همراه نمادهای _binary_<file_name>_start، _binary_<file_name>_end و _binary_<file_name>_size که نشان‌دهنده آغاز، پایان و اندازه داده هستند؛ جایی که <file_name> مسیر فایل ورودیِ مشخص‌شده در خط فرمان است که نویسه‌های غیرالفبایی‌عددی در آن به _ تبدیل شده‌اند.

اگر binary به عنوان مقدار برای --output-target استفاده شود، فایل خروجی یک فایل باینری خام خواهد بود که حاوی تصویر حافظه‌ای فایل ورودی است. نمادها و اطلاعات جابجایی دور ریخته خواهند شد. تصویر از آدرس نخستین بخش قابل‌بارگذاری در خروجی آغاز خواهد شد.

در صورت بروز خطا، llvm-objcopy با یک کد وضعیت غیرصفر خارج می‌شود. در غیر این صورت، با کد 0 خارج می‌شود.

برای گزارش باگ‌ها، لطفاً از <https://github.com/llvm/llvm-project/labels/tools:llvm-objcopy/strip> دیدن کنید.

یک مشکل شناخته‌شده در رابطه با --input-target و --target وجود دارد که باعث می‌شود تنها قالب‌های binary و ihex تأثیرگذار باشند. مقادیر دیگر نادیده گرفته خواهند شد و llvm-objcopy تلاش خواهد کرد تا قالب ورودی را حدس بزند.

llvm-strip(1) <llvm-strip.html>

توسط تیم LLVM نگهداری می‌شود (https://llvm.org).

2003-2026, LLVM Project

2026-07-15 22