| C++FILT(1) | GNU Development Tools | C++FILT(1) |
نام (NAME)
c++filt - رمزگشایی و بازگردانی نمادهای C++ و Java
خلاصه دستور (SYNOPSIS)
c++filt [-_|--strip-underscore]
[-n|--no-strip-underscore]
[-p|--no-params]
[-t|--types]
[-i|--no-verbose]
[-r|--no-recurse-limit]
[-R|--recurse-limit]
[-s format|--format=format]
[--help] [--version] [symbol...]
توضیحات (DESCRIPTION)
زبانهای C++ و Java قابلیت سربارگذاری توابع (function overloading) را ارائه میدهند؛ بدین معنا که میتوانید چندین تابع با یک نام بنویسید، به شرط آنکه هر تابع پارامترهایی با انواع مختلف دریافت کند. زبانهای C++ و Java بهمنظور تشخیص و تمایز این توابع همنام، آنها را در یک نام اسمبلی سطح پایین کدگذاری میکنند که هر نسخهٔ متفاوت را بهطور یکتا مشخص میسازد. این فرایند با نام mangling شناخته میشود. برنامهٔ c++filt [1] نگاشت معکوس را انجام میدهد: این برنامه نامهای سطح پایین را رمزگشایی (demangles) کرده و به نامهای سطح کاربر تبدیل میکند تا خوانا باشند.
هر واژهٔ حرفی-عددی (متشکل از حروف، ارقام، زیرخط، علامت دلار یا نقطه) که در ورودی مشاهده شود، یک نام درهمریختهٔ (mangled) بالقوه در نظر گرفته میشود. اگر نام به یک نام C++ رمزگشایی شود، نام C++ در خروجی جایگزین نام سطح پایین میگردد؛ در غیر این صورت، همان واژهٔ اولیه در خروجی نوشته میشود. بدین ترتیب، میتوانید یک فایل منبع اسمبلی کامل حاوی نامهای mangled را از طریق c++filt عبور دهید و همان فایل منبع را با نامهای رمزگشاییشده (demangled) دریافت کنید.
همچنین میتوانید از c++filt برای رمزگشایی نمادهای منفرد از طریق ارسال آنها در خط فرمان استفاده کنید:
c++filt <symbol>
اگر هیچ آرگومان symbol مشخص نشود، c++filt در عوض نام نمادها را از ورودی استاندارد میخواند. تمامی نتایج در خروجی استاندارد چاپ میشوند. تفاوت خواندن نامها از خط فرمان در مقایسه با خواندن آنها از ورودی استاندارد این است که انتظار میرود آرگومانهای خط فرمان صرفاً نامهای درهمریخته باشند و هیچ بررسی برای تفکیک آنها از متن اطراف صورت نمیگیرد. بدین ترتیب، برای مثال:
c++filt -n _Z1fv
بهدرستی کار میکند و نام را به “f()” رمزگشایی خواهد کرد؛ در حالی که:
c++filt -n _Z1fv,
کار نخواهد کرد (به ویرگول اضافه در انتهای نام درهمریخته توجه کنید که آن را نامعتبر میسازد). با این حال، این دستور کار خواهد کرد:
echo _Z1fv, | c++filt -n
و عبارت “f(),” را نمایش میدهد؛ یعنی نام رمزگشاییشده که یک ویرگول در انتهای آن قرار دارد. این رفتار به این دلیل است که هنگام خواندن نامها از ورودی استاندارد، انتظار میرود که آنها ممکن است بخشی از یک فایل منبع اسمبلی باشند که نویسههای اضافه و متفرقهای در انتهای یک نام درهمریخته قرار گرفته است. برای نمونه:
.type _Z1fv, @function
- -_
- --strip-underscore
-
در برخی سیستمها، هر دو کامپایلر C و C++ یک زیرخط در ابتدای هر نام قرار میدهند. برای مثال، نام C با عنوان "foo" نام سطحپایین "_foo" را دریافت میکند. این گزینه زیرخط اولیه را حذف میکند. اینکه آیا c++filt بهطور پیشفرض زیرخط را حذف میکند یا خیر، به معماری مقصد بستگی دارد.
- -n
- --no-strip-underscore
-
زیرخط اولیه را حذف نکن.
- -p
- --no-params
-
هنگام بازگردانی نام درهمریخته تابع، انواع پارامترهای تابع را نمایش نده.
- -t
- --types
-
تلاش برای بازگردانی انواع داده (types) علاوه بر نام توابع. این قابلیت بهطور پیشفرض غیرفعال است چرا که انواع درهمریخته معمولاً فقط درون کامپایلر استفاده میشوند و ممکن است با نامهای درهمریختهنشده اشتباه گرفته شوند. برای مثال، تابعی به نام "a" اگر به عنوان نام یک نوع درهمریخته در نظر گرفته شود، به "signed char" بازگردانده میشود.
- -i
- --no-verbose
-
جزئیات پیادهسازی (در صورت وجود) را در خروجیِ بازگردانیشده قرار نده.
- -r
- -R
- --recurse-limit
- --no-recurse-limit
- --recursion-limit
- --no-recursion-limit
-
محدودیت میزان بازگشت (recursion) انجامشده هنگام بازگردانی رشتهها را فعال یا غیرفعال میکند. از آنجا که قالبهای درهمریزی نامها سطوح نامحدودی از بازگشت را ممکن میسازند، ساخت رشتههایی که رمزگشایی آنها تمام فضای پشته (stack) موجود در ماشین میزبان را مصرف کرده و موجب خطای حافظه شود، محتمل است. این محدودیت با محدود کردن بازگشت به ۲۰۴۸ سطح تودرتو، تلاش میکند تا از بروز این اتفاق جلوگیری کند. حالت پیشفرض فعال بودن این محدودیت است، اما غیرفعال کردن آن ممکن است برای بازگردانی نامهای واقعاً پیچیده لازم باشد. با این حال توجه داشته باشید که اگر محدودیت بازگشت غیرفعال شود، اتمام فضای پشته محتمل است و هرگونه گزارش باگ در رابطه با چنین رخدادی رد خواهد شد. گزینه -r مترادفی برای گزینه --no-recurse-limit است. گزینه -R مترادفی برای گزینه --recurse-limit است.
- -s format
- --format=format
-
ابزار c++filt میتواند روشهای مختلف درهمریزی استفادهشده توسط کامپایلرهای گوناگون را رمزگشایی کند. آرگومان ارائهشده به این گزینه روش مورد استفاده را تعیین میکند:
- "auto"
-
انتخاب خودکار بر اساس فایل اجرایی (روش پیشفرض)
- "gnu"
-
روشی که توسط کامپایلر GNU C++ (g++) استفاده میشود
- "lucid"
-
روشی که توسط کامپایلر Lucid (lcc) استفاده میشود
- "arm"
-
روشی که توسط کتاب راهنمای ارجاع حاشیهنویسیشده C++ تعیین شده است
- "hp"
-
روشی که توسط کامپایلر HP (aCC) استفاده میشود
- "edg"
-
روشی که توسط کامپایلر EDG استفاده میشود
- "gnu-v3"
-
روشی که توسط کامپایلر GNU C++ (g++) همراه با V3 ABI استفاده میشود.
- "java"
-
روشی که توسط کامپایلر GNU Java (gcj) استفاده میشود
- "gnat"
-
روشی که توسط کامپایلر GNU Ada (GNAT) استفاده میشود.
- --help
-
چاپ خلاصهای از گزینههای c++filt و خروج.
- --version
-
چاپ شماره نگارش c++filt و خروج.
- @file
-
خواندن گزینههای خط فرمان از file. گزینههای خواندهشده به جای گزینه اصلی @file درج میشوند. اگر file وجود نداشته باشد یا قابل خواندن نباشد، گزینه به صورت لفظی و بدون تغییر باقی مانده و حذف نخواهد شد. گزینهها در file با فاصلههای خالی (whitespace) جدا میشوند. یک نویسه فاصله خالی میتواند با قرار دادن کل گزینه در گیومه تکی یا جفتی در یک گزینه گنجانده شود. هر نویسهای (از جمله بکاسلش) را میتوان با درج یک بکاسلش پیش از نویسه مورد نظر، اضافه کرد. خودِ file میتواند شامل گزینههای دیگری از @file باشد؛ اینگونه گزینهها به صورت بازگشتی پردازش خواهند شد..SH "پاورقیها (FOOTNOTES)"
- 1.
-
سیستمعامل MS-DOS اجازهٔ استفاده از نویسهٔ "+" را در نام فایلها نمیدهد، از این رو در MS-DOS این برنامه CXXFILT نام دارد.
همچنین ببینید (SEE ALSO)
مدخلهای Info برای binutils.
کپیرایت و تکثیر (COPYRIGHT)
کپیرایت (c) 1991-2025 Free Software Foundation, Inc.
اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نگارش 1.3 یا هر نگارش بعدی منتشر شده توسط Free Software Foundation اعطا میشود؛ بدون بخشهای ناوردا، بدون متنهای روی جلد، و بدون متنهای پشت جلد. یک نسخه از این مجوز در بخشی تحت عنوان "GNU Free Documentation License" گنجانده شده است.
| 2026-01-23 | binutils-2.45.1 |