.\" -*- 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-08-03 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)" x86_64\-w64\-mingw32\-c++filt \- بازگردانی نام‌های درهم‌ریخته (Demangle) نمادهای C++ و Java برای معماری x86_64 در MinGW-w64 .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" x86_64\-w64\-mingw32\-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 (درهم‌ریزی نام‌ها) شناخته می‌شود. برنامه \&\fBx86_64\-w64\-mingw32\-c++filt\fR [1] نگاشت معکوس را انجام می‌دهد: این برنامه نام‌های سطح‌پایین را رمزگشایی (\fIdemangle\fR) کرده و به نام‌های سطح کاربر تبدیل می‌کند تا خوانا و قابل درک باشند. .PP هر کلمه الفبایی‌عددی (شامل حروف، ارقام، زیرخط‌ها، علامت دلار یا نقطه) که در ورودی دیده شود، یک نام درهم‌ریخته احتمالی است. اگر نام به یک نام C++ رمزگشایی شود، نام C++ در خروجی جایگزین نام سطح‌پایین می‌شود؛ در غیر این صورت همان کلمه اصلی چاپ می‌گردد. بدین ترتیب می‌توانید یک فایل منبع اسمبلی کامل حاوی نام‌های درهم‌ریخته را به \fBx86_64\-w64\-mingw32\-c++filt\fR بفرستید و همان فایل منبع را حاوی نام‌های بازگردانی‌شده دریافت کنید. .PP همچنین می‌توانید با ارسال نمادها از طریق خط فرمان، نمادهای مجزا را به کمک \fBx86_64\-w64\-mingw32\-c++filt\fR رمزگشایی کنید: .PP .Vb 1 \& x86_64-w64-mingw32-c++filt .Ve .PP اگر هیچ آرگومان \fIsymbol\fR داده نشود، \fBx86_64\-w64\-mingw32\-c++filt\fR در عوض نام نمادها را از ورودی استاندارد می‌خواند. تمام نتایج در خروجی استاندارد چاپ می‌شوند. تفاوت خواندن نام‌ها از خط فرمان در مقایسه با خواندن از ورودی استاندارد در این است که از آرگومان‌های خط فرمان انتظار می‌رود صرفاً نام‌های درهم‌ریخته باشند و هیچ بررسی برای جداسازی آن‌ها از متن‌های مجاور انجام نمی‌شود. بنابراین برای نمونه: .PP .Vb 1 \& x86_64-w64-mingw32-c++filt -n _Z1fv .Ve .PP به درستی کار خواهد کرد و نام را به "f()" بازمی‌گرداند؛ در حالی که: .PP .Vb 1 \& x86_64-w64-mingw32-c++filt -n _Z1fv, .Ve .PP کار نخواهد کرد. (به کامای اضافی در انتهای نام درهم‌ریخته دقت کنید که باعث نامعتبر شدن آن می‌شود). با این حال این دستور کار خواهد کرد: .PP .Vb 1 \& echo _Z1fv, | x86_64-w64-mingw32-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++ یک زیرخط (_) در ابتدای هر نام قرار می‌دهند. برای مثال، نام C با عنوان \f(CW\*(C`foo\*(C'\fR نام سطح‌پایین \f(CW\*(C`_foo\*(C'\fR را دریافت می‌کند. این گزینه زیرخط ابتدایی را حذف می‌کند. اینکه آیا \fBx86_64\-w64\-mingw32\-c++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 تلاش می‌کند انواع داده را نیز علاوه بر نام توابع بازگردانی کند. این گزینه به‌طور پیش‌فرض غیرفعال است زیرا انواع درهم‌ریخته معمولاً فقط به صورت داخلی در کامپایلر استفاده می‌شوند و ممکن است با نام‌های عادی اشتباه گرفته شوند. برای مثال، تابعی با نام "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) موجود در ماشین میزبان را مصرف کرده و موجب خطای حافظه (Memory Fault) شود. این محدودیت با محدود کردن بازگشت به ۲۰۴۸ سطح تودرتو تلاش می‌کند از وقوع این مشکل جلوگیری نماید. .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 برنامه \fBx86_64\-w64\-mingw32\-c++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" خلاصه‌ای از گزینه‌های \fBx86_64\-w64\-mingw32\-c++filt\fR را چاپ کرده و خارج می‌شود. .IP \fB\-\-version\fR 4 .IX Item "--version" شماره نسخه \fBx86_64\-w64\-mingw32\-c++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" حق نشر \(co ۱۹۹۱\-۲۰۲۶ بنیاد نرم‌افزارهای آزاد (Free Software Foundation, Inc.) .PP مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نگارش ۱.۳ یا هر نگارش جدیدتر منتشرشده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. یک نسخه از این مجوز در بخش با عنوان "GNU Free Documentation License" گنجانده شده است.