.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "C++FILT 1" .TH C++FILT 1 2026-07-30 binutils-2.47 "GNU Development Tools" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" c++filt \- بازگردانی نمادهای درهم‌سازی‌شدهٔ C++ و Java (demangle) .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" c++filt [\fB\-_\fR|\fB\-\-strip\-underscore\fR] [\fB\-n\fR|\fB\-\-no\-strip\-underscore\fR] [\fB\-p\fR|\fB\-\-no\-params\fR] [\fB\-t\fR|\fB\-\-types\fR] [\fB\-i\fR|\fB\-\-no\-verbose\fR] [\fB\-r\fR|\fB\-\-no\-recurse\-limit\fR] [\fB\-R\fR|\fB\-\-recurse\-limit\fR] [\fB\-s\fR \fIformat\fR|\fB\-\-format=\fR\fIformat\fR] [\fB\-\-help\fR] [\fB\-\-version\fR] [\fIsymbol\fR...] .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" زبان‌های C++ و Java قابلیت سربارگذاری توابع (function overloading) را ارائه می‌دهند؛ بدین معنا که می‌توانید توابع متعددی با نام یکسان تعریف کنید، به شرط آنکه پارامترهایی با انواع متفاوت دریافت کنند. زبان‌های C++ و Java برای تشخیص و تمایز میان این توابعِ هم‌نام، آن‌ها را در قالب نام‌های سطح‌پایین اسمبلی کدگذاری می‌کنند که هر نسخه را به‌طور یکتا مشخص می‌سازد. این فرایند با عنوان \fImangling\fR (درهم‌سازی) شناخته می‌شود. برنامهٔ \&\fBc++filt\fR [1] نگاشت معکوس را انجام می‌دهد: این برنامه نام‌های سطح‌پایین را به نام‌های سطح کاربر رمزگشایی (\fIdemangle\fR) می‌کند تا خوانا و قابل فهم باشند. .PP هر کلمهٔ الفبایی\-عددی (متشکل از حروف، ارقام، زیرخط، دلار یا نقطه) که در ورودی مشاهده شود، به عنوان یک نام درهم‌سازی‌شدهٔ بالقوه در نظر گرفته می‌شود. اگر نام به یک نامِ C++ رمزگشایی شود، نامِ C++ در خروجی جایگزین نام سطح‌پایین می‌شود؛ در غیر این صورت، کلمهٔ اصلی در خروجی نوشته خواهد شد. به این ترتیب می‌توانید کل یک پروندهٔ منبع اسمبلی را که شامل نام‌های درهم‌سازی‌شده است به \fBc++filt\fR هدایت کرده و همان پرونده را با نام‌های رمزگشایی‌شده دریافت کنید. .PP شما همچنین می‌توانید با ارسال نمادها از طریق خط فرمان، از \fBc++filt\fR برای کشف معنای نمادهای تکی استفاده کنید: .PP .Vb 1 \& c++filt .Ve .PP اگر هیچ آرگومان \fIsymbol\fR مشخص نشود، \fBc++filt\fR در عوض نام‌های نماد را از ورودی استاندارد می‌خواند. تمامی نتایج در خروجی استاندارد چاپ می‌شوند. تفاوت میان خواندن نام‌ها از خط فرمان در مقایسه با خواندن از ورودی استاندارد این است که از آرگومان‌های خط فرمان انتظار می‌رود صرفاً نام‌های درهم‌سازی‌شده باشند و هیچ بررسی برای جداسازی آن‌ها از متن مجاور انجام نمی‌شود. بنابراین برای نمونه: .PP .Vb 1 \& c++filt \-n _Z1fv .Ve .PP به‌درستی کار کرده و نام را به «f()» بازگردانی می‌کند، در حالی که: .PP .Vb 1 \& c++filt \-n _Z1fv, .Ve .PP کار نخواهد کرد. (به کامای اضافه در انتهای نام درهم‌سازی‌شده توجه کنید که باعث نامعتبر شدن آن می‌شود). با این حال، دستور زیر کار خواهد کرد: .PP .Vb 1 \& echo _Z1fv, | c++filt \-n .Ve .PP و عبارت «f(),» را نمایش می‌دهد؛ یعنی نام رمزگشایی‌شده به همراه کامایی که در انتهای آن قرار دارد. این رفتار به این دلیل است که در خواندن از ورودی استاندارد، این انتظار وجود دارد که نام‌ها بخشی از پروندهٔ منبع اسمبلی باشند که ممکن است نویسه‌های اضافه و بی‌ربطی به انتهای نام درهم‌سازی‌شده چسبیده باشد. به عنوان نمونه: .PP .Vb 1 \& .type _Z1fv, @function .Ve .SH "گزینه‌ها (OPTIONS)" .IX Header "OPTIONS" .IP \fB\-_\fR 4 .IX Item "-_" .PD 0 .IP \fB\-\-strip\-underscore\fR 4 .IX Item "--strip-underscore" .PD در برخی سامانه‌ها، کامپایلرهای C و C++ یک خط زیرخط (underscore) در ابتدای هر نام قرار می‌دهند. برای مثال، نامِ C نماد \f(CW\*(C`foo\*(C'\fR به نام سطح‌پایین \f(CW\*(C`_foo\*(C'\fR تبدیل می‌شود. این گزینه خط زیرخط ابتدایی را حذف می‌کند. حذف شدن یا نشدن این زیرخط به‌صورت پیش‌فرض در \fBc++filt\fR، به معماری مقصد بستگی دارد. .IP \fB\-n\fR 4 .IX Item "-n" .PD 0 .IP \fB\-\-no\-strip\-underscore\fR 4 .IX Item "--no-strip-underscore" .PD زیرخط ابتدایی را حذف نکن. .IP \fB\-p\fR 4 .IX Item "-p" .PD 0 .IP \fB\-\-no\-params\fR 4 .IX Item "--no-params" .PD هنگام رمزگشایی نام تابع، نوع پارامترهای تابع را نمایش نده. .IP \fB\-t\fR 4 .IX Item "-t" .PD 0 .IP \fB\-\-types\fR 4 .IX Item "--types" .PD تلاش برای بازگردانی نوع‌ها (types) علاوه بر نام توابع. این گزینه به‌صورت پیش‌فرض غیرفعال است، زیرا نوع‌های درهم‌سازی‌شده معمولاً فقط در داخل کامپایلر کاربرد دارند و ممکن است با نام‌های درهم‌سازی‌نشده اشتباه گرفته شوند. برای نمونه، تابعی به نام «a» اگر به عنوان یک نوع درهم‌سازی‌شده فرض شود، به «signed char» رمزگشایی خواهد شد. .IP \fB\-i\fR 4 .IX Item "-i" .PD 0 .IP \fB\-\-no\-verbose\fR 4 .IX Item "--no-verbose" .PD جزئیات پیاده‌سازی (در صورت وجود) را در خروجیِ بازگردانی‌شده نیاور. .IP \fB\-r\fR 4 .IX Item "-r" .PD 0 .IP \fB\-R\fR 4 .IX Item "-R" .IP \fB\-\-recurse\-limit\fR 4 .IX Item "--recurse-limit" .IP \fB\-\-no\-recurse\-limit\fR 4 .IX Item "--no-recurse-limit" .IP \fB\-\-recursion\-limit\fR 4 .IX Item "--recursion-limit" .IP \fB\-\-no\-recursion\-limit\fR 4 .IX Item "--no-recursion-limit" .PD فعال یا غیرفعال کردن محدودیت در میزان بازگشت (recursion) انجام‌شده در هنگام رمزگشایی رشته‌ها. از آنجا که قالب‌های درهم‌سازی نام‌ها بازگشت نامحدود را مجاز می‌شمارند، ممکن است رشته‌هایی ساخته شوند که رمزگشایی آن‌ها تمام فضای پشتهٔ (stack) موجود در ماشین میزبان را به پایان رسانده و خطای حافظه ایجاد کند. این محدودیت تلاش می‌کند با محدود کردن بازگشت به ۲۰۴۸ سطح تودرتو، از این رویداد پیشگیری کند. .Sp پیش‌فرض بر این است که این محدودیت فعال باشد، اما برای رمزگشایی نام‌های بسیار پیچیده ممکن است غیرفعال کردن آن ضروری باشد. با این حال توجه داشته باشید که در صورت غیرفعال کردن این محدودیت، سرریز و اتمام پشته ممکن خواهد بود و هرگونه گزارش باگ در این زمینه رد خواهد شد. .Sp گزینهٔ \fB\-r\fR مترادف گزینهٔ \fB\-\-no\-recurse\-limit\fR است. گزینهٔ \fB\-R\fR مترادف گزینهٔ \fB\-\-recurse\-limit\fR است. .IP "\fB\-s\fR \fIformat\fR" 4 .IX Item "-s format" .PD 0 .IP \fB\-\-format=\fR\fIformat\fR 4 .IX Item "--format=format" .PD ابزار \fBc++filt\fR می‌تواند روش‌های مختلف درهم‌سازی مورد استفاده در کامپایلرهای متنوع را رمزگشایی کند. آرگومانِ این گزینه روش مورد استفاده را مشخص می‌کند: .RS 4 .ie n .IP """auto""" 4 .el .IP \f(CWauto\fR 4 .IX Item "auto" انتخاب خودکار بر اساس پروندهٔ اجرایی (روش پیش‌فرض) .ie n .IP """gnu""" 4 .el .IP \f(CWgnu\fR 4 .IX Item "gnu" روش مورد استفاده توسط کامپایلر GNU C++ (g++) .ie n .IP """lucid""" 4 .el .IP \f(CWlucid\fR 4 .IX Item "lucid" روش مورد استفاده توسط کامپایلر Lucid (lcc) .ie n .IP """arm""" 4 .el .IP \f(CWarm\fR 4 .IX Item "arm" روش مشخص‌شده توسط کتاب مرجع تفسیری C++ (ARM) .ie n .IP """hp""" 4 .el .IP \f(CWhp\fR 4 .IX Item "hp" روش مورد استفاده توسط کامپایلر HP (aCC) .ie n .IP """edg""" 4 .el .IP \f(CWedg\fR 4 .IX Item "edg" روش مورد استفاده توسط کامپایلر EDG .ie n .IP """gnu\-v3""" 4 .el .IP \f(CWgnu\-v3\fR 4 .IX Item "gnu-v3" روش مورد استفاده توسط کامپایلر GNU C++ (g++) با رابط ABI نسخهٔ ۳ (V3 ABI). .ie n .IP """java""" 4 .el .IP \f(CWjava\fR 4 .IX Item "java" روش مورد استفاده توسط کامپایلر GNU Java (gcj) .ie n .IP """gnat""" 4 .el .IP \f(CWgnat\fR 4 .IX Item "gnat" روش مورد استفاده توسط کامپایلر GNU Ada (GNAT). .RE .RS 4 .RE .IP \fB\-\-help\fR 4 .IX Item "--help" نمایش چکیده‌ای از گزینه‌های \fBc++filt\fR و خروج. .IP \fB\-\-version\fR 4 .IX Item "--version" نمایش نسخهٔ \fBc++filt\fR و خروج. .IP \fB@\fR\fIfile\fR 4 .IX Item "@file" خواندن گزینه‌های خط فرمان از \fIfile\fR. گزینه‌های خوانده‌شده به‌جای گزینهٔ اصلی @\fIfile\fR جایگزین می‌شوند. اگر \fIfile\fR وجود نداشته باشد یا قابل خواندن نباشد، با این گزینه به‌صورت تحت‌اللفظی رفتار خواهد شد و حذف نمی‌شود. .Sp گزینه‌ها در \fIfile\fR با نویسه‌های فاصله از یکدیگر جدا می‌شوند. یک نویسهٔ فاصله را می‌توان با قرار دادن کل گزینه در میان نقل‌قول تکی یا جفتی در آن گنجاند. هر نویسه‌ای (شامل بک‌اسلش) می‌تواند با پیشوند کردن یک بک‌اسلش در کنار نویسه وارد شود. خودِ \fIfile\fR می‌تواند حاوی گزینه‌های @\fIfile\fR دیگری باشد؛ چنین گزینه‌هایی به‌صورت بازگشتی پردازش خواهند شد. .SH "پاورقی‌ها (FOOTNOTES)" .IX Header "FOOTNOTES" .IP 1. 4 سامانهٔ MS\-DOS اجازهٔ استفاده از نویسهٔ \f(CW\*(C`+\*(C'\fR را در نام پرونده‌ها نمی‌دهد، بنابراین در MS\-DOS نام این برنامه \fBCXXFILT\fR است. .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" مدخل‌های Info برای \fIbinutils\fR. .SH "کپی‌رایت و تکثیر (COPYRIGHT)" .IX Header "COPYRIGHT" حق نشر \(co ۱۹۹۱\-۲۰۲۶ بنیاد نرم‌افزار آزاد (Free Software Foundation, Inc.) .PP اجازهٔ نسخه‌برداری، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخهٔ ۱.۳ یا هر نسخهٔ متأخرتری که توسط بنیاد نرم‌افزار آزاد منتشر شده، داده می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون جلد و بدون متون پشت جلد. نسخه‌ای از این مجوز در بخش مربوط به «GNU Free Documentation License» آورده شده است.