LLVM-OBJDUMP(1) LLVM LLVM-OBJDUMP(1)

llvm-objdump - ابزار بررسی و تخلیه محتوای فایل‌های شیء در LLVM

llvm-objdump [commands] [options] [filenames...]

ابزار llvm-objdump محتوای فایل‌های شیء و ایمیج‌های نهایی پیوند‌یافتهٔ مشخص‌شده در خط فرمان را چاپ می‌کند. اگر نام فایلی مشخص نشود، llvm-objdump تلاش خواهد کرد از a.out بخواند. اگر از - به عنوان نام فایل استفاده شود، llvm-objdump فایلی را روی جریان ورودی استاندارد خود پردازش خواهد کرد.

حداقل یکی از دستورهای زیر الزامی است، و برخی از دستورها را می‌توان با دستورهای دیگر ترکیب کرد:

نمایش اطلاعات موجود در سرآیندهای آرشیو.
دیزاسمبل کردن تمام بخش‌های اجراییِ موجود در فایل‌های ورودی. در برخی از معماری‌ها (AArch64،‏ PowerPC،‏ x86)، همه دستورالعمل‌های شناخته‌شده به‌طور پیش‌فرض دیزاسمبل می‌شوند. در سایر معماری‌ها، برای فعال‌سازی برخی از مجموعه‌های دستورالعمل به --mcpu یا --mattr نیاز است. دستورالعمل‌های غیرفعال به‌صورت <unknown> نمایش داده می‌شوند.
دیزاسمبل کردن تمام بخش‌های یافت‌شده در فایل‌های ورودی.
تنها نمادهای مشخص‌شده را دیزاسمبل می‌کند. در صورت مشخص شدن --demangle، نام‌های نمادِ ساده‌سازی‌شده (demangled) را می‌پذیرد؛ در غیر این صورت نام‌های نمادِ اصلی (mangled) را دریافت می‌کند. به‌طور ضمنی شامل --disassemble است.
تخلیه بخش‌های اشکال‌زدایی DWARF مشخص‌شده. مقادیر پشتیبانی‌شده عبارتند از:

frames - .debug_frame

نمایش محتوای سرآیند کلی فایل.
نمایش محتوای بخش fault map.
نمایش خلاصه‌ای از سرآیندهای مربوط به هر بخش.
نمایش اطلاعات نحوه استفاده و خروج. با دستورهای دیگر ترکیب نمی‌شود.
نمایش سرآیندهای اختصاصی قالب فایل.
نمایش مدخل‌های بازنشانی (relocation) در فایل.
نمایش مدخل‌های بازنشانی پویا (dynamic relocation) در فایل.
تخلیه محتوای دودویی خامِ بخش clang AST.
نمایش محتویات هر بخش.
نمایش جدول نمادها.
نمایش محتوای جدول نمادهای پویا.
نمایش اطلاعات بازگشایی (unwind info) ورودی(ها).

این عملیات در حال حاضر فقط برای فایل‌های شیء COFF و Mach-O پشتیبانی می‌شود.

نمایش نسخه فایل اجرایی llvm-objdump. با دستورهای دیگر ترکیب نمی‌شود.
نمایش تمام اطلاعات موجود سرآیندها. معادل با مشخص کردن گزینه‌های --archive-headers،‏ --file-headers،‏ --private-headers،‏ --reloc،‏ --section-headers و --syms.

llvm-objdump از گزینه‌های زیر پشتیبانی می‌کند:

نشانی نمایش‌یافته در دیس‌اسمبل یا چاپ سرآیند بخش را به میزان افست مشخص‌شده افزایش می‌دهد.
معماری هدف را هنگام دیس‌اسمبل کردن مشخص می‌کند. برای دیدن فهرستی از هدف‌های در دسترس از --version استفاده کنید.
جستجوی شیء (object) با استفاده از شناسه ساخت (build ID) داده‌شده، که به صورت یک رشته هگزادسیمال مشخص می‌شود. شیء یافت‌شده طوری مدیریت می‌شود که گویی یک نام فایل ورودی بوده است.
رمزگشایی (demangle) نام نمادها در خروجی.
مسیری به یک دایرکتوری دارای زیردایرکتوری .build-id جهت جستجوی اطلاعات اشکال‌زدایی برای باینری‌های پیراسته‌شده (stripped) ارائه می‌دهد. نمونه‌های چندگانه از این آرگومان به ترتیبی که داده شده‌اند جستجو می‌شوند.
فاصله‌ی تورفتگی نمایش متغیرهای سطح کد منبع یا توابع درون‌خطی (inlined)، نسبت به ابتدای دیس‌اسمبل. مقدار پیش‌فرض ۵۲ نویسه است.
مکان توابع درون‌خطی (inlined) را در کنار دیس‌اسمبل چاپ می‌کند. format می‌تواند ascii، limits-only یا unicode باشد، که در صورت حذف به صورت پیش‌فرض unicode است.
مکان متغیرهای سطح کد منبع (در ثبات‌ها یا حافظه) را در کنار دیس‌اسمبل چاپ می‌کند. format می‌تواند ascii یا unicode باشد، که در صورت حذف به صورت پیش‌فرض unicode است.
تلاش یا عدم تلاش برای جستجو در debuginfod جهت باینری‌های اشکال‌زدایی. مگر اینکه صراحتاً مشخص شود، debuginfod تنها در صورتی فعال است که libcurl در حین کامپایل گنجانده شده باشد (LLVM_ENABLE_CURL) و دست‌کم یک URL سرور توسط متغیر محیطی DEBUGINFOD_URLS ارائه شده باشد.
اجرای دستورها تنها روی بخش‌های مشخص‌شده. برای Mach-O از segment,section برای مشخص کردن نام بخش استفاده کنید.
هنگام دیس‌اسمبل کردن، شماره خطوط کد منبع را نمایش می‌دهد. مستلزم گزینه --disassemble است.
ارسال گزینه‌های دیس‌اسمبلر مختص به معماری هدف. گزینه‌های موجود:
  • reg-names-std: فقط ARM (پیش‌فرض). خروجی را مطابق مستندات مجموعه دستورالعمل ARM چاپ می‌کند، به طوری که r13/r14/r15 با sp/lr/pc جایگزین می‌شوند.
  • reg-names-raw: فقط ARM. استفاده از r به همراه شماره ثبات.
  • no-aliases: فقط AArch64 و RISC-V. چاپ نماد یادآور خام دستورالعمل (raw mnemonic) به جای نماد شبه‌دستور.
  • numeric: فقط RISC-V. چاپ نام‌های خام ثبات به جای نماد یادآور ABI (مثلاً چاپ x1 به جای ra).
  • att: فقط x86 (پیش‌فرض). چاپ بر اساس نحو (syntax) مربوط به AT&T.
  • intel: فقط x86. چاپ بر اساس نحو (syntax) مربوط به intel.
فعال یا غیرفعال کردن خروجی رنگی دیس‌اسمبلر.
  • off: غیرفعال کردن خروجی رنگی دیس‌اسمبلر.
  • on: فعال کردن خروجی رنگی دیس‌اسمبلر.
  • terminal: فعال کردن خروجی رنگی دیس‌اسمبلر در صورتی که ترمینال از آن پشتیبانی کند (پیش‌فرض).
یک نوع CPU خاص را برای دیس‌اسمبل کردن هدف قرار می‌دهد. برای نمایش پردازنده‌های در دسترس --mcpu=help را مشخص کنید.
فعال/غیرفعال کردن ویژگی‌های مختص هدف. برای نمایش ویژگی‌های در دسترس --mattr=help را مشخص کنید.
مشخص کردن یک آرگومان جهت ارسال به کتابخانه CommandLine متعلق به LLVM.
هنگام دیس‌اسمبل کردن، نشانی‌های ابتدایی دستورالعمل‌ها یا بازنشانی‌های درون‌خطی (inline relocations) چاپ نشود.
عدم استفاده از قالب هگزادسیمال برای مقادیر فوری (immediate) در خروجی دیس‌اسمبل.
هنگام دیس‌اسمبل کردن، بایت‌های خام هر دستورالعمل چاپ نشود.
نمایش محتوای بخش‌های offloading در LLVM و دسته‌های HIP offload.
هنگام دیس‌اسمبل کردن با گزینه --source، پیشوند prefix را به ابتدای مسیرهای مطلق اضافه می‌کند.
هنگام دیس‌اسمبل کردن با گزینه --source، به تعداد level دایرکتوری ابتدایی را از مسیرهای مطلق حذف می‌کند. این گزینه بدون --prefix هیچ تأثیری ندارد.
استفاده از قالب هگزادسیمال هنگام چاپ مقادیر فوری (immediate) در خروجی دیس‌اسمبل (پیش‌فرض).
هنگام دیس‌اسمبل کردن، کد منبع را به صورت درهم‌آمیخته با دیس‌اسمبل نمایش می‌دهد. مستلزم گزینه --disassemble است.
نمایش همه نمادها حین دیس‌اسمبل، حتی اگر چند نماد در یک مکان یکسان تعریف شده باشند.
نمایش ستون LMA هنگام استخراج سرآیندهای بخش ELF. در حالت پیش‌فرض خاموش است مگر آنکه بخشی مقادیر متفاوتی برای VMA و LMA داشته باشد.
--start-address=<address> هنگام دیزاسمبل، فقط از آدرس مشخص‌شده به بعد دیزاسمبل انجام می‌شود.

هنگام چاپ بازنشانی‌ها، فقط بازنشانی‌هایی که آفست وصله‌کاری آن‌ها حداقل برابر با address باشد چاپ می‌شوند.

هنگام چاپ نمادها، فقط نمادهایی با مقداری حداقل برابر با address چاپ می‌شوند.

هنگام دیزاسمبل، دیزاسمبل فقط تا آدرس مشخص‌شده (بدون در بر گرفتن خود آن) انجام می‌شود.

هنگام چاپ بازنشانی‌ها، فقط بازنشانی‌هایی با آفست وصله‌کاری تا سقف address چاپ می‌شوند.

هنگام چاپ نمادها، فقط نمادهایی با مقداری تا سقف address چاپ می‌شوند.

هنگام دیزاسمبل، عملوند مقصد انشعاب را نمادگذاری می‌کند تا به جای یک آدرس واقعی، یک برچسب چاپ شود.

هنگام چاپ یک مرجع نماد سراسری وابسته به PC، آن را به عنوان یک آفست از نماد پیشرو چاپ می‌کند.

هنگامی که یک بخش bb-address-map موجود باشد (یعنی فایل شیء با -fbasic-block-address-map ساخته شده باشد)، برچسب‌ها در عوض از آن بخش بازیابی می‌شوند. اگر یک pgo-analysis-map در کنار bb-address-map موجود باشد، هر تحلیل موجود پس از برچسب بلوک مربوطه چاپ می‌شود. به‌طور پیش‌فرض، هر تحلیلی با نمایش ویژه (مانند BlockFrequency، BranchProbability و غیره) به صورت مقادیر هگزادسیمال خام چاپ می‌شود.

تنها برای AArch64، BPF، PowerPC و X86 پشتیبانی می‌شود.

مثال:
یک دستور انشعاب نمادگذاری‌نشده با یک مقصد محلی و دسترسی به حافظه وابسته به PC مانند
cmp eax, dword ptr [rip + 4112]
jge 0x20117e <_start+0x25>

ممکن است به این شکل تبدیل شود:

<L0>:
  cmp eax, dword ptr <g>
  jge      <L0>
هنگام استفاده از --symbolize-operands به همراه bb-address-map و pgo-analysis-map، تحلیل‌ها با استفاده از همان قالبی که گذرهای تحلیلی آن‌ها نمایش می‌دهند چاپ می‌شوند. نمونه‌ای از قالب خوانا (pretty format)، چاپ فرکانس بلوک‌ها نسبت به بلوک ورودی، مشابه BFI است.

فقط زمانی کار می‌کند که --symbolize-operands فعال باشد.

سه‌گانه هدف (Target triple) برای انجام دیزاسمبل؛ برای مشاهده اهداف موجود --version را ببینید.
جهت سازگاری با GNU objdump نادیده گرفته می‌شود.
منسوخ شده است. هنگامی که همراه با --disassemble استفاده شود، سبک کدی که باید از پسانه X86 تولید شود را انتخاب می‌کند. مقادیر پشتیبانی‌شده عبارتند از:
اسمبلی به سبک AT&T
اسمبلی به سبک Intel

سبک پیش‌فرض دیزاسمبل att است.

هنگام دیزاسمبل، بلوک‌های صفر رد نمی‌شوند.
@<FILE>
گزینه‌ها و دستورهای خط فرمان را از فایل پاسخ <FILE> می‌خواند.
معماری مد نظر برای دیس‌اسمبل را مشخص می‌کند. برای دیدن معماری‌های موجود --version را ببینید.
آفست هر عضو آرشیو را برای آرشیوهای Mach-O چاپ می‌کند (نیازمند --archive-headers است).
اطلاعات بایندینگ (binding) را نمایش می‌دهد.
جدول داده در کد (data in code) را نمایش می‌دهد.
تنها دستورالعمل‌های نماد مشخص‌شده را دیس‌اسمبل می‌کند.
اطلاعات اصلاحات زنجیره‌ای (chained fixups) را چاپ می‌کند.
اطلاعات بایند و تغییر مبنا (rebase) را که توسط dyld برای حل ارجاعات خارجی در یک باینری نهایی پیوندخورده به کار می‌رود، چاپ می‌کند.
کتابخانه‌های اشتراکی استفاده‌شده برای فایل‌های پیوندخورده را نمایش می‌دهد.
برای اطلاعات اشکال‌زدایی از فایل .dSYM استفاده می‌کند.
شناسهٔ کتابخانهٔ اشتراکی را برای فایل‌های dylib نمایش می‌دهد.
نمادهای صادرشده را نمایش می‌دهد.
جدول شروع توابع را برای شیءهای Mach-O چاپ می‌کند. یا addrs (پیش‌فرض) برای چاپ صرفاً نشانی‌های توابع، names برای چاپ صرفاً نام‌های توابع (در صورت وجود)، یا both برای چاپ نام‌ها در کنار نشانی‌ها.
در صورت وجود، اطلاعات شماره خط را از اطلاعات اشکال‌زدایی چاپ می‌کند.
هنگام دیس‌اسمبل کردن، نشانی ابتدایی کامل را چاپ می‌کند.
جدول نمادهای غیرمستقیم را نمایش می‌دهد.
بخش info plist را به صورت رشته نمایش می‌دهد.
اطلاعات بایندینگ با تاخیر (lazy binding) را نمایش می‌دهد.
نکات بهینه‌سازی پیونددهنده (linker) را نمایش می‌دهد.
از تجزیه‌کنندهٔ فایل شیء مخصوص Mach-O استفاده می‌کند. دستورها و سایر گزینه‌ها ممکن است هنگام استفاده به همراه --macho رفتار متفاوتی داشته باشند.
هیچ سرآیند ابتدایی را چاپ نمی‌کند.
هنگام دیس‌اسمبل کردن، عملوندهای نمادین را چاپ نمی‌کند.
اطلاعات شیءهای Mach-O را به شکل غیرمفصل یا عددی نمایش می‌دهد.
فرادهاده‌های زمان اجرای Objective-C را نمایش می‌دهد.
تنها اولین سرآیند فایلِ ویژهٔ قالب را نمایش می‌دهد.
اطلاعات تغییر مبنا (rebasing) را نمایش می‌دهد.
مسیرهای جستجوی زمان اجرا را برای باینری نمایش می‌دهد.
سرآیندهای جامع (universal headers) را نمایش می‌دهد.
اطلاعات بایندینگ ضعیف (weak binding) را نمایش می‌دهد.
افزودن توضیحات نماد به خروجی دیس‌اسمبل.
رمزگشایی جدول traceback در خروجی دیس‌اسمبل. مستلزم --disassemble است.

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

llvm-nm(1) <llvm-nm.html>, llvm-otool(1) <llvm-otool.html>, llvm-readelf(1) <llvm-readelf.html>, llvm-readobj(1) <llvm-readobj.html>

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

2003-2026, LLVM Project

2026-07-15 22