.TH MAKEDUMPFILE.CONF 5 "20 Apr 2026" "makedumpfile v1.7.9" "راهنمای مدیر سیستم لینوکس (Linux System Administrator's Manual)" .SH "نام (NAME)" makedumpfile.conf \- پرونده پیکربندی فیلتر برای makedumpfile(8). .SH "توضیحات (DESCRIPTION)" .PP پرونده makedumpfile.conf یک فایل پیکربندی برای ابزار makedumpfile است. فایل makedumpfile.conf شامل دستورهای پاک‌سازی (erase) برای فیلتر کردن و پالایش داده‌های موردنظر هسته از vmcore در هنگام ایجاد \fIDUMPFILE\fR توسط ابزار makedumpfile است. ابزار makedumpfile پیکربندی فیلتر را می‌خواند و پس از پردازش دستورهای فیلتر، فهرستی از آدرس‌های حافظه و اندازه‌های آن‌ها ایجاد می‌کند. مکان‌هایی از حافظه که باید پالایش و فیلتر شوند، سپس با نویسه \fIX\fR (مقدار ۵۸ در مبنای ۱۶ / هگز) مسموم (جایگزین) می‌شوند. .SH "قالب فایل (FILE FORMAT)" .PP این فایل از بخش‌های مربوط به ماژول‌ها تشکیل شده است که حاوی دستورهای فیلتر هستند. یک بخش با نام بخش در داخل براکت‌ها آغاز می‌شود و تا شروع بخش بعدی ادامه می‌یابد. .br "["<\fIModuleName\fR>"]" .br <\fIFilterCommands\fR> .br که در آن: .br "[" نویسه \fB[\fR است .br "]" نویسه \fB]\fR است .TP <\fIModuleName\fR> یا 'vmlinux' است یا نام یک ماژول هسته لینوکس. .TP <\fIFilterCommands\fR> فهرستی از یک یا چند دستور فیلتر است همان‌طور که در بخش \fBدستورهای فیلتر (FILTER COMMANDS)\fR این صفحه راهنما شرح داده شده است. .PP نام بخش نشان‌دهنده نام ماژول هسته (شامل \fBvmlinux\fR) است که نمادهای مشخص‌شده در دستورهای erase بعدی به آن تعلق دارند. بخش بدون نام به‌طور پیش‌فرض بخش \fB[vmlinux]\fR در نظر گرفته می‌شود. با این حال، کاربر می‌تواند صریحاً بخش \fB[vmlinux]\fR را نیز تعریف کند. این بخش‌ها به ابزار makedumpfile کمک می‌کنند تا پیش از پردازش دستورهای erase بعدی، پرونده debuginfo مناسب برای هسته یا ماژول را انتخاب کند. پیش از انتخاب پرونده debuginfo مناسب، نام ماژول با ماژول‌های بارگذاری‌شده از vmcore اعتبارسنجی می‌شود. اگر تطابقی یافت نشود، بخش نادیده گرفته شده و makedumpfile به بخش ماژول بعدی می‌رود. در صورت یافتن تطابق، makedumpfile تلاش خواهد کرد پرونده debuginfo مربوط به ماژول را بارگذاری کند. اگر debuginfo ماژول در دسترس نباشد، makedumpfile این بخش را با یک پیام هشدار نادیده می‌گیرد. .SH "دستورهای فیلتر (FILTER COMMANDS)" .SS "دستور فیلتر (filter command)" .PP یک دستور فیلتر یا یک دستور erase است یا یک ساختار حلقه (loop construct). هر دستور erase و ساختار حلقه باید در یک خط جدید آغاز شود. هر دستور فیلتر داده‌هایی از دامپ را که باید پاک شوند توصیف می‌کند. ساختار نحوی: .br <\fIEraseCommands\fR>|<\fILoopConstruct\fR> .br که در آن: .TP <\fIEraseCommands\fR> در زیربخش \fBدستور erase (erase command)\fR از این صفحه راهنما شرح داده شده است. .TP <\fILoopConstruct\fR> در زیربخش \fBساختار حلقه (Loop construct)\fR از این صفحه راهنما شرح داده شده است. .SS "دستور erase (erase command)" .PP اندازه مشخصی از داده‌های هسته را که توسط نماد هسته/ماژول یا مؤلفه عضو آن ارجاع داده شده است، پاک می‌کند. ساختار نحوی دستور erase عبارت است از: .br \fBerase\fR <\fISymbol\fR>[.\fImember\fR[...]] [\fBsize\fR <\fISizeValue\fR>[K|M]] .br \fBerase\fR <\fISymbol\fR>[.\fImember\fR[...]] [\fBsize\fR <\fISizeSymbol\fR>] .br \fBerase\fR <\fISymbol\fR>[.\fImember\fR[...]] [\fBnullify\fR] .br که در آن: .br .TP <\fISymbol\fR> نام یک نماد هسته یا ماژول (متغیر) که بخشی از نمادهای سراسری \fB/proc/kallsyms\fR است. .TP <\fISizeValue\fR> یک مقدار عدد صحیح و مثبت به عنوان اندازه داده بر حسب بایت برای پاک‌سازی. پسوندهای 'K' و 'M' را می‌توان به ترتیب برای مشخص کردن کیلوبایت و مگابایت استفاده کرد، که در آن K به معنای ۱۰۲۴ بایت و M به معنای 1024 ^ 2 = 1048576 بایت است. این پسوندها به بزرگی و کوچکی حروف حساس نیستند. .TP <\fISizeSymbol\fR> یک عبارت ساده به شکل <\fISymbol\fR>[.\fImember\fR[...]] که نشان‌دهنده نمادی است که حاوی یک مقدار عدد صحیح مثبت به عنوان اندازه داده بر حسب بایت برای پاک‌سازی می‌باشد. .TP <\fISymbol\fR>[.\fImember\fR[...]] یک عبارت ساده که به نام یک نماد سراسری هسته یا مؤلفه‌های عضو آن ختم می‌شود. این عبارت صرف‌نظر از این‌که از نوع اشاره‌گر باشد یا خیر، همواره از عملگر '.' برای مشخص کردن مؤلفه \fImember\fR نماد هسته یا عضو آن استفاده می‌کند. .TP \fImember\fR[...] عضو یا مؤلفه‌ای از عضو در <\fISymbol\fR>. .PP دستور \fBerase\fR دو آرگومان می‌گیرد: ۱. نام نماد هسته یا مؤلفه‌های عضو آن و ۲. اندازه داده‌های ارجاع‌شده توسط آرگومان (۱) یا کلمه کلیدی \fBnullify\fR. آرگومان دوم \fBsize\fR یا \fBnullify\fR اختیاری است. واحد مقدار اندازه بر حسب \fBبایت (bytes)\fR است. اگر گزینه \fBsize\fR مشخص نشده باشد، اندازه آرگومان اول بر اساس نوع داده آن با استفاده از اطلاعات dwarf موجود در پرونده debuginfo تعیین می‌شود. در مورد نوع داده '\fBchar *\fR'، طول رشته‌ای که اشاره‌گر '\fBchar *\fR' به آن اشاره می‌کند با حد بالای ۱۰۲۴ تعیین می‌شود. مقدار \fBsize\fR را می‌توان به دو صورت تعیین کرد: ۱. یک مقدار عددی صحیح همان‌طور که در بالا توضیح داده شد (<\fISizeValue\fR>) و ۲. یک عبارت ساده به شکل <\fISymbol\fR>[.\fImember\fR[...]]] که به یک متغیر از نوع پایه (عدد صحیح) منتهی می‌شود. .PP اگر <\fISymbol\fR> مشخص‌شده از نوع '\fBvoid *\fR' باشد، کاربر باید گزینه \fBsize\fR یا \fBnullify\fR را مشخص کند، در غیر این صورت دستور erase هیچ اثری نخواهد داشت. .PP گزینه \fBnullify\fR تنها زمانی کار می‌کند که <\fISymbol\fR> مشخص‌شده یک اشاره‌گر باشد. گزینه \fBnullify\fR به جای پاک کردن داده‌هایی که توسط اشاره‌گر مشخص‌شده به آن‌ها اشاره می‌شود، مقدار اشاره‌گر را پاک کرده و آن را برابر '0' (NULL) قرار می‌دهد. لطفاً توجه داشته باشید که تهی کردن (nullify) مقادیر اشاره‌گر ممکن است بر قابلیت اشکال‌زدایی \fIDUMPFILE\fR ایجادشده تأثیر بگذارد. از گزینه \fBnullify\fR تنها زمانی استفاده کنید که اندازه داده‌هایی که باید پاک شوند مشخص نباشد؛ \fBمانند\fR داده‌هایی که توسط '\fBvoid *\fR' به آن‌ها اشاره می‌شود. .PP بیایید به پرونده makedumpfile.conf در مثال زیر نگاهی بیندازیم که برای پاک‌سازی داده‌های مورد نظر هسته از ماژول هسته‌ای با نام \fBmymodule\fR پیکربندی شده است. در خطوط ۱ و ۳، کاربر گزینه size را هنگام پاک‌سازی نمادهای 'array_var' و 'mystruct1.name' مشخص نکرده است. در عوض، کاربر به makedumpfile متکی است تا به‌طور خودکار اندازه‌های مورد نیاز برای پاک‌سازی را تعیین کند؛ \fBیعنی\fR ۱۰۰ بایت برای 'array_var' و ۱۱ بایت برای 'mystruct1.name'. در خط ۲، هنگام پاک‌سازی عضو 'mystruct1.buffer'، کاربر مقدار اندازه ۲۵ را در برابر اندازه واقعی ۵۰ مشخص کرده است. در این حالت، \fBsize\fR مشخص‌شده توسط کاربر اولویت دارد و makedumpfile تنها ۲۵ بایت از 'mystruct1.buffer' را پاک می‌کند. در خط ۴، اندازه داده‌هایی که اشاره‌گر \fBvoid *\fR با نام 'mystruct1.addr' به آن‌ها اشاره می‌کند ناشناخته است؛ بنابراین گزینه \fBnullify\fR برای بازنشانی مقدار اشاره‌گر به NULL مشخص شده است. در خط ۵، 'mystruct2.addr_size' به عنوان آرگومان \fBsize\fR برای تعیین اندازه داده‌هایی که توسط اشاره‌گر \fBvoid *\fR با نام 'mystruct2.addr' به آن‌ها اشاره می‌شود، مشخص شده است. .br .B مثال: .PP با فرض این‌که قطعه کد زیر مربوط به ماژول هسته 'mymodule' باشد: .br struct s1 { .br char *name; .br void *addr1; .br void *addr2; .br char buffer[50]; .br }; .br struct s2 { .br void *addr; .br long addr_size; .br }; .br /* Global symbols */ .br char array_var[100]; .br struct s1 mystruct1; .br struct s2 *mystruct2; .br int foo() .br { .br ... .br s1.name = "Hello World"; .br ... .br } .br \fBmakedumpfile.conf:\fR .br [mymodule] .br erase array_var .br erase mystruct1.buffer size 25 .br erase mystruct1.name .br erase mystruct1.addr1 nullify .br # Assuming addr2 points to 1024 bytes .br erase mystruct1.addr2 size 1K .br erase mystruct2.addr size mystruct2.addr_size .br .B EOF .SS "ساختار حلقه (Loop construct)" .PP ساختار حلقه به کاربر امکان می‌دهد تا عناصر لیست پیوندی یا آرایه را پیمایش کرده و محتوای داده‌های ارجاع‌شده توسط هر عنصر را پاک کند. .br \fBfor\fR <\fIid\fR> \fBin\fR {<\fIArrayVar\fR> | .br <\fIStructVar\fR> \fBvia\fR <\fINextMember\fR> | .br <\fIListHeadVar\fR> \fBwithin\fR <\fIStructName\fR>\fB:\fR<\fIListHeadMember\fR>} .br \fBerase\fR <\fIid\fR>[.\fIMemberExpression\fR] [\fBsize\fR <\fISizeExpression\fR>|\fBnullify\fR] .br [\fBerase\fR <\fIid\fR>...] .br [...] .br \fBendfor\fR .PP که در آن: .PP .TP <\fIid\fR> نام دلخواهی که برای اشاره موقت به عناصر لیست استفاده می‌شود. این متغیر، متغیر تکرار (iteration variable) نیز نامیده می‌شود. .TP <\fIArrayVar\fR> یک عبارت ساده به شکل <\fISymbol\fR>[.\fImember\fR[...]] که به یک متغیر آرایه‌ای ختم می‌شود. .TP <\fIStructVar\fR> یک عبارت ساده به شکل <\fISymbol\fR>[.\fImember\fR[...]] که به متغیری اشاره‌کننده به یک ساختار ختم می‌شود. .TP <\fINextMember\fR> عضوی در درون <\fIStructVar\fR> که به شیئی از همان نوع <\fIStructVar\fR> اشاره می‌کند. .TP <\fIListHeadVar\fR> یک عبارت ساده به شکل <\fISymbol\fR>[.\fImember\fR[...]] که به متغیری از نوع struct list_head ختم می‌شود. .TP <\fIStructName\fR> نام نوع ساختاری که می‌تواند با استفاده از متغیر HEAD با نام <\fIListHeadVar\fR> پیمایش شود و حاوی عضوی به نام <\fIListHeadMember\fR> است. .TP <\fIListHeadMember\fR> نام عضوی در <\fIStructName\fR> از نوع struct list_head. .TP <\fIMemberExpression\fR> یک عبارت ساده به شکل [.\fImember\fR[...]] برای مشخص کردن یک عضو یا مؤلفه‌ای از یک عنصر در <\fIArrayVar\fR>، <\fIStructVar\fR> یا <\fIStructName\fR>. .TP <\fISizeExpression\fR> مقدار اندازه به شکل <\fISizeValue\fR>، <\fIid\fR>[.\fIMemberExpression\fR] یا <\fISymbol\fR>[.\fImember\fR[...]]. .PP ساختار حلقه \fBfor\fR امکان پیمایش روی فهرستی از عناصر در یک آرایه یا لیست‌های پیوندی را فراهم می‌کند. هر عنصر در لیست به متغیر تکرار <\fIid\fR> نسبت داده می‌شود. نوع متغیر تکرار بر اساس نوع عناصر لیست تعیین می‌شود. ورودی مشخص‌شده پس از پایانه '\fBin\fR'، ورودی LIST نامیده می‌شود. ورودی LIST می‌تواند یک متغیر آرایه، متغیر/اشاره‌گر ساختار، یا متغیری از نوع struct list_head باشد. مجموعه دستورهای \fBerase\fR مشخص‌شده بین \fBfor\fR و \fBendfor\fR برای هر عنصر در ورودی LIST اجرا خواهند شد. .PP اگر ورودی LIST مشخص‌شده یک متغیر آرایه‌ای باشد، حلقه برای هر عنصر آرایه اجرا خواهد شد. اندازه آرایه با استفاده از اطلاعات dwarf تعیین می‌شود. .PP اگر ورودی LIST مشخص‌شده یک متغیر/اشاره‌گر ساختار باشد، باید یک عضو پیمایش (<\fINextMember\fR>) با استفاده از پایانه '\fBvia\fR' مشخص شود. حلقه \fBfor\fR تا زمانی که مقدار عضو پیمایش برابر NULL شود یا در صورت وجود لیست پیوندی حلقوی با آدرس گره اول <\fIStructVar\fR> مطابقت پیدا کند، ادامه خواهد یافت. .PP اگر ورودی LIST با استفاده از متغیری از نوع struct list_head مشخص شده باشد، باید از پایانه \fBwithin\fR برای مشخص کردن نام ساختار <\fIStructName\fR> دربرگیرنده آن به همراه عضو از نوع struct list_head پس از '\fB:\fR' که بخشی از لیست پیوندی است، استفاده شود. در دستور erase، شناسه <\fIid\fR> ساختاری را نشان می‌دهد که list_head در آن قرار دارد (ELEMENT_OF). .PP مثال زیر نحوه استفاده از ساختار حلقه را برای پیمایش آرایه، لیست پیوندی از طریق عضو next، و list_head نشان می‌دهد. .B مثال: .PP با فرض این‌که قطعه کد زیر مربوط به ماژول هسته 'mymodule' باشد: .br struct s1 { .br struct *next; .br struct list_head list; .br char private[100]; .br void *key; .br long key_size; .br }; .br /* Global symbols */ .br struct s1 mystruct1; .br static LIST_HEAD(s1_list_head); .br struct s1 myarray[100]; .br void foo() .br { .br struct s1 *s1_ptr; .br ... .br ... .br s1_ptr = malloc(...); .br ... .br ... .br list_add(&s1_ptr->list, &s1_list_head); .br ... .br } .br \fBmakedumpfile.conf:\fR .br [mymodule] .br # erase private fields from list starting with mystruct1 connected via .br # 'next' member: .br for mys1 in mystruct1 via next .br erase mys1.private .br erase mys1.key size mys1.key_size .br endfor .br # erase private fields from list starting with list_head variable .br # s1_list_head. .br for mys1 in s1_list_head.next within s1:list .br erase mys1.private .br erase mys1.key size mys1.key_size .br endfor .br # erase private fields from all elements of the array myarray: .br for mys1 in myarray .br erase mys1.private .br erase mys1.key size mys1.key_size .br endfor .br .B EOF .PP در مثال بالا، اولین ساختار \fBfor\fR لیست پیوندی را از طریق یک متغیر ساختار مشخص \fBmystruct1\fR از نوع \fBstruct s1\fR پیمایش می‌کند. لیست پیوندی را می‌توان با استفاده از عضو '\fBnext\fR' از \fBmystruct1\fR پیمایش کرد؛ بنابراین از پایانه \fBvia\fR برای مشخص کردن نام عضو پیمایش '\fBnext\fR' استفاده شده است. .PP دومین ساختار \fBfor\fR لیست پیوندی را از طریق متغیر struct list_head مشخص‌شده \fBs1_list_head.next\fR پیمایش می‌کند. نماد سراسری \fBs1_list_head\fR آدرس شروع لیست پیوندی است و عضو \fBnext\fR آن به آدرس عضو از نوع struct list_head به نام '\fBlist\fR' از \fBstruct s1\fR اشاره می‌کند. بنابراین از پایانه \fBwithin\fR برای مشخص کردن نام ساختار '\fBs1\fR' که با استفاده از متغیر \fBs1_list_head.next\fR قابل پیمایش است به همراه نام عضو از نوع struct list_head به نام '\fBlist\fR' که بخشی از لیست پیوندی آغازشونده از نماد سراسری \fBs1_list_head\fR است، استفاده شده است. .PP سومین ساختار \fBfor\fR عناصر آرایه مشخص‌شده از طریق متغیر آرایه‌ای \fBmyarray\fR را پیمایش می‌کند. .br .SH "همچنین ببینید (SEE ALSO)" .PP makedumpfile(8)