.\" -*- 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-01-23 binutils-2.45.1 "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 .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] نگاشت معکوس را انجام می‌دهد: این برنامه نام‌های سطح پایین را رمزگشایی (\fIdemangles\fR) کرده و به نام‌های سطح کاربر تبدیل می‌کند تا خوانا باشند. .PP هر واژهٔ حرفی\-عددی (متشکل از حروف، ارقام، زیرخط، علامت دلار یا نقطه) که در ورودی مشاهده شود، یک نام درهم‌ریختهٔ (\fImangled\fR) بالقوه در نظر گرفته می‌شود. اگر نام به یک نام C++ رمزگشایی شود، نام C++ در خروجی جایگزین نام سطح پایین می‌گردد؛ در غیر این صورت، همان واژهٔ اولیه در خروجی نوشته می‌شود. بدین ترتیب، می‌توانید یک فایل منبع اسمبلی کامل حاوی نام‌های mangled را از طریق \fBc++filt\fR عبور دهید و همان فایل منبع را با نام‌های رمزگشایی‌شده (demangled) دریافت کنید. .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 به‌درستی کار می‌کند و نام را به \(lqf()\(rq رمزگشایی خواهد کرد؛ در حالی که: .PP .Vb 1 \& c++filt \-n _Z1fv, .Ve .PP کار نخواهد کرد (به ویرگول اضافه در انتهای نام درهم‌ریخته توجه کنید که آن را نامعتبر می‌سازد). با این حال، این دستور کار خواهد کرد: .PP .Vb 1 \& echo _Z1fv, | c++filt \-n .Ve .PP و عبارت \(lqf(),\(rq را نمایش می‌دهد؛ یعنی نام رمزگشایی‌شده که یک ویرگول در انتهای آن قرار دارد. این رفتار به این دلیل است که هنگام خواندن نام‌ها از ورودی استاندارد، انتظار می‌رود که آن‌ها ممکن است بخشی از یک فایل منبع اسمبلی باشند که نویسه‌های اضافه و متفرقه‌ای در انتهای یک نام درهم‌ریخته قرار گرفته است. برای نمونه: .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++‎ یک زیرخط در ابتدای هر نام قرار می‌دهند. برای مثال، نام 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++ تعیین شده است .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++) همراه با 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 با فاصله‌های خالی (whitespace) جدا می‌شوند. یک نویسه فاصله خالی می‌تواند با قرار دادن کل گزینه در گیومه تکی یا جفتی در یک گزینه گنجانده شود. هر نویسه‌ای (از جمله بک‌اسلش) را می‌توان با درج یک بک‌اسلش پیش از نویسه مورد نظر، اضافه کرد. خودِ \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" کپی‌رایت (c) 1991\-2025 Free Software Foundation, Inc. .PP اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نگارش 1.3 یا هر نگارش بعدی منتشر شده توسط Free Software Foundation اعطا می‌شود؛ بدون بخش‌های ناوردا، بدون متن‌های روی جلد، و بدون متن‌های پشت جلد. یک نسخه از این مجوز در بخشی تحت عنوان "GNU Free Documentation License" گنجانده شده است.