.\" -*- 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] عمل نگاشت معکوس را انجام می‌دهد: این برنامه نام‌های سطح‌پایین را رمزگشایی (\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 هنگام واگردانی درهم‌سازی (demangle) نام یک تابع، انواع پارامترهای تابع را نمایش نمی‌دهد. .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++ (\f(CWg++\fR) استفاده می‌شود .ie n .IP """lucid""" 4 .el .IP \f(CWlucid\fR 4 .IX Item "lucid" روشی که توسط کامپایلر Lucid (\f(CWlcc\fR) استفاده می‌شود .ie n .IP """arm""" 4 .el .IP \f(CWarm\fR 4 .IX Item "arm" روشی که توسط کتاب راهنمای مرجع تفسیری C++ (Annotated Reference Manual) مشخص شده است .ie n .IP """hp""" 4 .el .IP \f(CWhp\fR 4 .IX Item "hp" روشی که توسط کامپایلر HP (\f(CWaCC\fR) استفاده می‌شود .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++ (\f(CWg++\fR) با V3 ABI استفاده می‌شود. .ie n .IP """java""" 4 .el .IP \f(CWjava\fR 4 .IX Item "java" روشی که توسط کامپایلر GNU Java (\f(CWgcj\fR) استفاده می‌شود .ie n .IP """gnat""" 4 .el .IP \f(CWgnat\fR 4 .IX Item "gnat" روشی که توسط کامپایلر GNU Ada (\f(CWGNAT\fR) استفاده می‌شود. .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" Copyright (c) 1991\-2025 Free Software Foundation, Inc. .PP اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخهٔ 1.3 یا هر نسخهٔ بعدی منتشرشده توسط Free Software Foundation اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. نسخه‌ای از این مجوز در بخشی با عنوان "GNU Free Documentation License" آورده شده است.