.\" -*- 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 عبور دهید و همان فایل منبع را با نام‌های بازگردانی‌شده (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 به‌درستی کار خواهد کرد و نام را به "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 هنگام واگشایی (demangling) نام یک تابع، انواع داده‌ای پارامترهای تابع نمایش داده نشوند. .IP \fB\-t\fR 4 .IX Item "-t" .PD 0 .IP \fB\-\-types\fR 4 .IX Item "--types" .PD تلاش برای واگشایی نوع‌ها علاوه بر نام‌های توابع. این گزینه به‌طور پیش‌فرض غیرفعال است زیرا نوع‌های درهم‌ریخته (mangled) معمولاً فقط درون کامپایلر استفاده می‌شوند و ممکن است با نام‌های غیردرهم‌ریخته اشتباه گرفته شوند. برای نمونه، تابعی به نام "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++ (C++ Annotated Reference Manual) .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 با نویسهٔ فاصله از هم جدا می‌شوند. یک نویسهٔ فاصله را می‌توان با احاطه کردن کل گزینه در علامت‌های نقل‌قول تکی یا جفتی درون گزینه گنجاند. هر نویسه‌ای (از جمله یک بک‌اسلش) را می‌توان با افزودن پیشوند بک‌اسلش به نویسه در آن قرار داد. خود \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» گنجانده شده است.