LLVM-PDBUTIL(1) LLVM LLVM-PDBUTIL(1)

llvm-pdbutil - جرم‌شناسی و عیب‌یابی فایل‌های PDB

  • خلاصه دستور
  • توضیحات
  • زیرفرمان‌ها
•
pretty
  • خلاصه
  • گزینه‌ها
  • گزینه‌های فیلترسازی و مرتب‌سازی
  • گزینه‌های نوع نماد
  • سایر گزینه‌ها
•
dump
  • خلاصه
  • گزینه‌ها
  • گزینه‌های کانتینر MSF
  • گزینه‌های ماژول و فایل
  • گزینه‌های نماد
  • گزینه‌های رکورد نوع
  • گزینه‌های متفرقه
•
bytes
  • خلاصه
  • گزینه‌ها
  • گزینه‌های فایل MSF
  • گزینه‌های جریان PDB
  • گزینه‌های جریان DBI
  • گزینه‌های ماژول
  • گزینه‌های رکورد نوع
•
pdb2yaml
  • خلاصه
  • گزینه‌ها
•
yaml2pdb
  • خلاصه
  • گزینه‌ها
•
merge
  • خلاصه
  • گزینه‌ها

llvm-pdbutil [subcommand] [options]

نمایش نوع‌ها، نمادها، رکوردهای CodeView و سایر اطلاعات از یک فایل PDB، و همچنین دستکاری و ایجاد فایل‌های PDB. ابزار llvm-pdbutil معمولاً توسط آزمون‌های مبتنی بر FileCheck برای سنجش قابلیت‌های خواندن و نوشتن PDB در LLVM به کار می‌رود، اما می‌تواند برای بررسی‌های عمومی و تحلیل قانونی (forensics) فایل‌های PDB یا به عنوان جایگزینی برای cvdump نیز استفاده شود.

llvm-pdbutil به چندین زیردستور تقسیم شده است که هر یک برای هدف خاصی طراحی شده‌اند. خلاصه‌ای کوتاه از هر دستور در ادامه می‌آید و جزئیات بیشتر در بخش‌های بعدی ارائه شده است.

  • pretty - تخلیه اطلاعات نماد و نوع در قالبی که تلاش می‌کند تا جای ممکن شبیه کد منبع اصلی به نظر برسد.
  • dump - تخلیه نوع‌ها و ساختارهای سطح پایین از فایل PDB، شامل رکوردهای CodeView، جدول‌های هش، جریان‌های PDB و غیره.
  • bytes - تخلیه داده‌ها از جریان‌ها، رکوردها، نوع‌ها، نمادها و غیره از فایل PDB به صورت بایت‌های خام.
  • yaml2pdb - با دریافت یک توصیف YAML از یک فایل PDB، یک فایل PDB معتبر و منطبق بر آن توصیف تولید می‌کند.
  • pdb2yaml - برای یک فایل PDB داده‌شده، یک توصیف YAML از بخشی از فایل یا تمام آن به گونه‌ای ایجاد می‌کند که بتوان PDB را بازسازی کرد.
  • merge - با دریافت دو فایل PDB، یک فایل PDB سوم تولید می‌کند که حاصل ادغام دو PDB ورودی است.

مهم:

زیردستور pretty بر پایه Windows DIA SDK ساخته شده است، و از این رو روی بسترهای غیر ویندوزی (non-Windows) پشتیبانی نمی‌شود.

کاربرد: llvm-pdbutil pretty [options] <input PDB file>

زیردستور pretty نمای بسیار سطح‌بالایی از اطلاعات اشکال‌زدایی برنامه شما را نمایش می‌دهد. از آنجا که این زیردستور بر پایه Windows DIA SDK (رابط برنامه‌نویسی استانداردی که ابزارها و دیباگرهای ویندوز به وسیله آن اطلاعات اشکال‌زدایی را جویا می‌شوند) ساخته شده است، دیدگاه موثق‌تری نسبت به چگونگی تفسیر اطلاعات اشکال‌زدایی شما توسط یک دیباگر، در مقایسه با حالتی که رکوردهای سطح پایین CodeView را نمایش می‌دهد، فراهم می‌آورد.

نکته:

فیلترهای exclude بر فیلترهای include اولویت دارند؛ بنابراین اگر فیلتری هم با یک قاعده include و هم با یک قاعده exclude تطابق داشته باشد، مستثنی خواهد شد.
هنگام تخلیه compilandها، مشارکت‌های فایل منبع compiland یا نمادهای به ازای هر compiland، این گزینه به llvm-pdbutil دستور می‌دهد تا هر compiland منطبق بر عبارت باقاعده (regular expression) مشخص‌شده را نادیده بگیرد.
هنگام تخلیه نمادهای سراسری (global)، عمومی (public) یا به ازای هر compiland، این گزینه به llvm-pdbutil دستور می‌دهد تا هر نمادی را که با عبارت باقاعده مشخص‌شده مطابقت دارد، نادیده بگیرد.
هنگام تخلیه نوع‌ها، این گزینه به llvm-pdbutil دستور می‌دهد تا هر نوعی را که با عبارت باقاعده مشخص‌شده مطابقت دارد، نادیده بگیرد.
هنگام تخلیه compilandها، مشارکت‌های فایل منبع compiland یا نمادهای به ازای هر compiland، جستجوی اولیه را تنها به compilandهایی محدود می‌کند که با عبارت باقاعده مشخص‌شده تطابق دارند.
هنگام تخلیه نمادهای سراسری، عمومی یا به ازای هر compiland، جستجوی اولیه را تنها به نمادهایی محدود می‌کند که با عبارت باقاعده مشخص‌شده تطابق دارند.
هنگام تخلیه نوع‌ها، جستجوی اولیه را تنها به نوع‌هایی محدود می‌کند که با عبارت باقاعده مشخص‌شده تطابق دارند.
تنها نوع‌هایی را نمایش می‌دهد که حداقل به اندازه مقدار مشخص‌شده فاصله‌گذاری هم‌ترازی (alignment padding) داشته باشند، با احتساب فاصله‌گذاری در کلاس‌های پایه و اعضای فیلد تجمعی (aggregate).
تنها نوع‌هایی را نمایش می‌دهد که حداقل به اندازه مقدار مشخص‌شده فاصله‌گذاری هم‌ترازی داشته باشند، با نادیده گرفتن فاصله‌گذاری در کلاس‌های پایه و اعضای فیلد تجمعی.
تنها نوع‌های T را نمایش می‌دهد که در آن‌ها مقدار sizeof(T) بزرگ‌تر یا مساوی با مقدار مشخص‌شده باشد.
نوع‌ها و نمادهای ایجادشده توسط کامپایلر را نمایش نمی‌دهد.
هنگام تخلیه یک enum، تعریف کامل enum (مانند مقادیر مجزای enumerator) را نمایش نمی‌دهد.
نمادهای کتابخانه‌های سیستم را نمایش نمی‌دهد.
تمام گزینه‌های دیگر در این دسته‌بندی را در بر می‌گیرد.
تعاریف کلاس را در قالب مشخص‌شده نمایش می‌دهد.
=all      - نمایش تمام اعضای کلاس از جمله داده‌ها، ثابت‌ها، typedefها، توابع و غیره (پیش‌فرض)
=layout   - تنها نمایش اعضایی که در اندازه کلاس نقش دارند.
=none     - عدم نمایش تعاریف کلاس (مثلاً تنها نمایش نام و فهرست پایه)
کلاس‌ها را با ترتیب مشخص‌شده نمایش می‌دهد.
=none            - تعریف‌نشده / بدون ترتیب مرتب‌سازی خاص (پیش‌فرض)
=name            - مرتب‌سازی کلاس‌ها بر اساس نام
=size            - مرتب‌سازی کلاس‌ها بر اساس اندازه
=padding         - مرتب‌سازی کلاس‌ها بر اساس مقدار پدینگ (padding)
=padding-pct     - مرتب‌سازی کلاس‌ها بر اساس درصد فضای اشغال‌شده توسط پدینگ
=padding-imm     - مرتب‌سازی کلاس‌ها بر اساس مقدار پدینگ بی‌واسطه
=padding-pct-imm - مرتب‌سازی کلاس‌ها بر اساس درصد فضای اشغال‌شده توسط پدینگ بی‌واسطه
هنگام تخلیه تعاریف کلاس، پس از پیمایش بازگشتی به تعداد دفعات مشخص‌شده متوقف می‌شود. پیش‌فرض 0 است که به معنای نامحدود است.
نمایش کلاس‌ها
نمایش compilandها (مانند فایل‌های شیء)
نمایش enumها
تخلیه نمادهای خارجی (مانند نمادهای صادرشده / exported)
تخلیه نمادهای سراسری (global)
تخلیه نگاشت میان خطوط کد منبع و نشانی‌های کد.
نمایش نمادها (متغیرها، توابع و غیره) به ازای هر compiland
نوع نمادها برای تخلیه، هنگامی که -globals، -externals، یا -module-syms مشخص شده باشد. (پیش‌فرض all)
=thunks - نمایش نمادهای thunk
=data   - نمایش نمادهای داده (data)
=funcs  - نمایش نمادهای تابع (funcs)
=all    - نمایش همه نمادها (پیش‌فرض)
برای نمادهای تخلیه‌شده از طریق گزینه‌های -module-syms، -globals، یا -externals، نتایج را به ترتیب مشخص‌شده مرتب می‌کند.
=none - تعریف‌نشده / بدون ترتیب مرتب‌سازی خاص
=name - مرتب‌سازی نمادها بر اساس نام
=size - مرتب‌سازی نمادها بر اساس اندازه
نمایش انواع typedef
نمایش تمام انواع (در بر گیرنده -classes، -enums و -typedefs)
فعال یا غیرفعال کردن اجباری خروجی رنگی. به‌طور پیش‌فرض، در صورت ارسال خروجی به ترمینال، از رنگ استفاده می‌شود.
هنگام نمایش آدرس‌های مجازی نسبی، فرض می‌کند که فرایند در آدرس داده‌شده بارگذاری شده است و آدرس مطلقی را که ایجاد می‌شود نمایش می‌دهد.

کاربرد: llvm-pdbutil dump [options] <input PDB file>

زیرفرمان dump اطلاعات سطح پایینی را درباره ساختار یک فایل PDB نمایش می‌دهد. این زیرفرمان به‌طور گسترده توسط زیرساخت آزمایش LLVM استفاده می‌شود، اما می‌تواند برای تحلیل قانونی (جرم‌شناسی) PDB نیز به کار رود. این ابزار نقشی مشابه با ابزار cvdump متعلق به Microsoft ایفا می‌کند.

نکته:

زیرفرمان dump جزئیات درونی ساختار فایل را نمایش می‌دهد. از این رو، خواننده باید پیش از استفاده از این دستور با ساختار فایل PDB <> آشنا باشد.

خلاصه‌ای از تمام جریان‌های (streams) موجود در فایل PDB را نمایش می‌دهد.
در ترکیب با -streams، اطلاعاتی درباره اینکه جریان مشخص‌شده چه بلوک‌هایی را اشغال کرده است به خروجی اضافه می‌کند.
اطلاعات هدر MSF و PDB را نمایش می‌دهد.

برای تمامی گزینه‌هایی که اطلاعات را از هر ماژول/واحد ترجمه (compiland) استخراج می‌کنند، خروجی را به ماژول مشخص‌شده محدود می‌کند.
فایل‌های مبدئی را که در ایجاد هر ماژول نمایش‌داده‌شده نقش دارند، نمایش می‌دهد.
اطلاعات خطوط درون‌خطی‌شده (زیربخش DEBUG_S_INLINEELINES در CodeView) را نمایش می‌دهد.
اطلاعات خطوط (زیربخش DEBUG_S_LINES در CodeView) را نمایش می‌دهد.
اطلاعات واحدهای ترجمه (compiland) را نمایش می‌دهد.
صادرات بین‌ماژولی (زیربخش DEBUG_S_CROSSSCOPEEXPORTS در CodeView) را نمایش می‌دهد.
واردات بین‌ماژولی (زیربخش DEBUG_S_CROSSSCOPEIMPORTS در CodeView) را نمایش می‌دهد.
تخلیه رکوردهای نمادهای سراسری (global).
تخلیه اطلاعات اضافی دربارهٔ نمادهای سراسری، مانند باکت‌های هش و مقادیر هش.
تخلیه رکوردهای نمادهای عمومی (public).
تخلیه اطلاعات اضافی دربارهٔ نمادهای عمومی، مانند باکت‌های هش و مقادیر هش.
تخلیه نمادها (توابع، متغیرها و غیره) به ازای هر ماژول تخلیه‌شده.
به ازای هر رکورد نمادی که در نتیجهٔ گزینهٔ -symbols تخلیه می‌شود، تمام بایت‌های رکورد را نیز به صورت دودویی (باینری) نمایش می‌دهد.

تخلیه رکوردهای نوع CodeView از جریان TPI.
تخلیه اطلاعات اضافی از جریان TPI، مانند هش‌ها و آرایهٔ آفست‌های شاخص نوع.
به ازای هر رکورد نوعِ تخلیه‌شده، تمام بایت‌های رکورد را به صورت دودویی نیز نمایش می‌دهد.
فقط انواع دارای شاخص نوعِ مشخص‌شده را تخلیه می‌کند.
تخلیه رکوردهای نوع CodeView از جریان IPI.
تخلیه اطلاعات اضافی از جریان IPI، مانند هش‌ها و آرایهٔ آفست‌های شاخص نوع.
به ازای هر رکورد شناسه (ID) تخلیه‌شده، تمام بایت‌های رکورد را به صورت دودویی نیز نمایش می‌دهد.
فقط رکوردهای ID با شاخص نوع هگزادسیمالِ مشخص‌شده را تخلیه می‌کند.
هنگامی که همراه با -type-index یا -id-index استفاده شود، به جای تنها رکورد دارای شاخص مشخص‌شده، کل گراف وابستگی را برای شاخص تعیین‌شده تخلیه می‌کند. برای نمونه، اگر شاخص نوع 0x4000 تابعی باشد که نوع بازگشتی آن دارای شاخص 0x3000 است، و شما -dependents=0x4000 را تعیین کنید، هر دو رکورد (و همچنین هر وابستگی دیگری در درخت) تخلیه خواهند شد.
بیشتر گزینه‌های دیگر را فعال می‌کند.
تخلیه مشارکت‌های بخش.
تخلیه سرآیندهای بخش تصویر.
تخلیه نگاشت بخش.
تخلیه جدول رشته‌های PDB.

کاربرد: llvm-pdbutil bytes [گزینه‌ها] <فایل PDB ورودی>

همانند زیرفرمان dump، زیرفرمان bytes نیز اطلاعات سطح‌پایینی درباره ساختار یک فایل PDB نمایش می‌دهد، اما برای واکاوی‌های موشکافانه و حتی عمیق‌تر (forensics) به کار می‌رود. زیرفرمان bytes ساختارهای گوناگون در فایل PDB را بر اساس گزینه‌های مشخص‌شده در خط فرمان پیدا کرده و آن‌ها را به‌صورت هگز (hex) تخلیه می‌کند. برای نمونه، فردی که بر روی پشتیبانی از تولید فایل‌های PDB کار می‌کند، به‌منظور مقایسه دو فایل PDB برای اطمینان از سازگاری بایت‌به‌بایت، از این دستور استفاده فراوانی خواهد کرد. صرفاً مقایسه بایت‌های یک فایل کامل یا یک جریان (stream) کامل کافی نیست، زیرا کاملاً طبیعی است که یک ساختار یکسان در مکان‌های متفاوتی از دو فایل PDB مختلف قرار گرفته باشد، و "یافتن" آن ساختار، نیمی از کار است.

تخلیه داده‌های دودویی از محدوده مشخص‌شده‌ای از بلوک‌های فایل MSF.
تخلیه داده‌های دودویی از محدوده مشخص‌شده‌ای از بایت‌ها در فایل.
تخلیه نگاشت صفحه‌های آزاد MSF (free page map).
تخلیه داده‌های دودویی از جریان‌های مشخص‌شده. قالب به‌صورت SN[:Start][@Size] است. برای نمونه، -stream-data=7:3@12 مقدار ۱۲ بایت از جریان ۷ را با شروع از آفست ۳ در آن جریان، تخلیه می‌کند.

تخلیه بایت‌های نگاشت نام PDB (PDB Name Map).

تخلیه زیرجریان نگاشت ویرایش و ادامه (edit and continue map) از جریان DBI.
تخلیه زیرجریان اطلاعات فایل از جریان DBI.
تخلیه زیرجریان modi از جریان DBI.
تخلیه زیرجریان مشارکت‌های بخش (section contributions) از جریان DBI.
تخلیه نگاشت بخش از جریان DBI.
تخلیه نگاشت سرور نوع (type server map) از جریان DBI.
تمام گزینه‌های این دسته را به نمایه ماژول مشخص‌شده محدود می‌کند. به‌طور پیش‌فرض، گزینه‌های این دسته بایت‌های تمام ماژول‌ها را تخلیه می‌کنند.
تخلیه بایت‌های زیربخش اشکال‌زدایی C13 هر ماژول.
هنگامی که همراه با -chunks مشخص شود، زیربخش اشکال‌زدایی C13 را برای هر نوع زیربخش به بخش‌های جداگانه تقسیم کرده و آن‌ها را به‌طور مجزا تخلیه می‌کند.
تخلیه زیرجریان رکورد نماد از هر ماژول.

تخلیه رکورد از جریان IPI با نمایه نوع داده‌شده.
تخلیه رکورد از جریان TPI با نمایه نوع داده‌شده.

کاربرد: llvm-pdbutil pdb2yaml [گزینه‌ها] <فایل PDB ورودی>

کاربرد: llvm-pdbutil yaml2pdb [گزینه‌ها] <فایل YAML ورودی>

تولید یک فایل PDB از روی یک توصیف YAML. نحو YAML در اینجا شرح داده نشده است. در عوض، از llvm-pdbutil pdb2yaml استفاده کرده و خروجی را به عنوان یک نقطه شروع نمونه بررسی کنید.

نوشتن PDB حاصل در فایل مشخص‌شده.

کاربرد: llvm-pdbutil merge [گزینه‌ها] <فایل PDB ورودی ۱> <فایل PDB ورودی ۲>

ادغام دو فایل PDB در یک فایل واحد.

نوشتن PDB حاصل در فایل مشخص‌شده.

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

2003-2026, LLVM Project

2026-07-15 22