CECCOMP(1) Ceccomp Manual CECCOMP(1)

ceccomp - ابزار آزمون و بازرسی ساختار باینری‌های کامپایل‌شده

usage: ceccomp <asm|disasm|emu|trace|probe|version|help> [FILE] [-q|--quiet]
               [-f|--format FMT] [-a|--arch ARCH] [-p|--pid PID] [-s|--seize]
               [-o|--output FILE] [-c|--color WHEN] ...

هسته لینوکس از فیلترهای BPF برای محدودسازی قواعد فراخوانی‌های سیستمی (syscall) استفاده می‌کند که از طریق فراخوانی سیستمی seccomp یا prctl اعمال می‌شوند. برای نمونه، در زیر یک فیلتر ساده به صورت قالب هگزادسیمال آورده شده است که فراخوانی سیستمی execve را مسدود می‌کند:

1: 20 00 00 00 00 00 00 00     $A = $syscall_nr
2: 15 00 00 01 3b 00 00 00     if ($A != execve) goto 4
3: 06 00 00 00 00 00 00 00     return KILL
4: 06 00 00 00 00 00 ff 7f     return ALLOW

بخش ارائه‌شده به صورت هگزادسیمال، همان چیزی است که هسته دریافت کرده است و ceccomp آن را دریافت کرده و به متنی خوانا برای انسان دیس‌اسمبل می‌کند؛ به عنوان نمونه lineno در سمت چپ و statement در سمت راست قرار دارد.


مهم (Important)

در ادامه، از
TEXT به‌طور خلاصه برای متن خوانا برای انسان BPF، و از RAW به‌طور خلاصه برای فرمت خام BPF استفاده می‌شود؛ لطفاً این نکته را به خاطر داشته باشید.

ابزار ceccomp دارای ۵ عملکرد اصلی است و در اصل یک نسخه بازنویسی‌شده به زبان C از seccomp-tools می‌باشد. با این حال، برخی تغییرات ناسازگار بنیادین (breaking changes) وجود دارد که باید از آن‌ها مطلع باشید و در بخش مربوط به هر زیردستور مشخص شده‌اند.

ceccomp asm [-c WHEN] [-a ARCH] [-f FMT] [TEXT]

سرهم‌سازی (اسمبل کردن) TEXT به RAW. از این زیردستور برای جاسازی قواعد فیلتر دست‌نویس درون کدهای زبان C یا مشاهده کدهای اصلی یک فایل TEXT استفاده کنید.

WHEN

تعیین می‌کند چه زمانی هشدارها و خطاها به صورت رنگی نمایش داده شوند. اگر مقدار آن بر روی auto تنظیم شده باشد، ceccomp هنگامی که مقصد خروجی یک «tty» باشد، رنگ‌ها را نمایش می‌دهد. مقادیر مجاز عبارتند از auto، never یا always. مقدار پیش‌فرض auto است.

ARCH

تنظیم روی هر معماری که توسط libseccomp پشتیبانی می‌شود. این پارامتر برای تعیین شماره فراخوانی سیستمی واقعی در پس نام فراخوانی به کار می‌رود (برای نمونه، در معماری x86_64، می‌توانید مانند مثال ابتدایی بالا به جای 59 مستقیماً "execve" را بنویسید). در صورت عدم تعیین، معماری سیستم شما از طریق uname شناسایی می‌شود. مقدار پیش‌فرض روی سیستم شما x86_64 است.

نکته (Note)

از
نسخه ۴.۰ به بعد، ترتیب بایت‌ها (Endianness) مد نظر قرار می‌گیرد. اگر ترتیب بایت‌های معماری هدف (ARCH) با ترتیب بایت‌های ماشین متفاوت باشد، فیلترها (بخش‌های CODE و K) قبل از خروجی دادن معکوس خواهند شد.

FMT

تعیین می‌کند که ceccomp چگونه کدهای bpf باینری را تولید کند. مقادیر مجاز می‌توانند hexfmt، hexline یا raw باشند. نمونه‌های خروجی در بخش «مثال‌ها (EXAMPLES)» آورده شده‌اند. مقدار پیش‌فرض hexline است.

TEXT

یک نام فایل اختیاری می‌گیرد تا مشخص کند کدام فایل حاوی TEXT باید اسمبل شود. در صورت عدم تعیین، از ورودی استاندارد (stdin) خوانده خواهد شد. کاراکتر - به عنوان stdin در نظر گرفته می‌شود.

مهم (Important)

نحو اسمبل کردن از
نسخه ۴.۰ به بعد تغییرات زیادی داشته است؛ لطفاً بخش مرجع دستور زبان در ادامه را بررسی کنید!

لطفاً بخش «مرجع دستور زبان متنی (TEXT GRAMMAR REFERENCE)» را مطالعه کنید تا با نحوه نگارش دستی یک قاعده آشنا شوید. چند نمونه در بخش «مثال‌ها (EXAMPLES)» نمایش داده خواهد شد.

دستور (Command) تفاوت (Difference)
seccomp-tools asm از دستور زبان اختصاصی خود برای اسمبل کردن استفاده می‌کند که تا حدی شبیه اسکریپت است؛ می‌تواند متن‌های نامعتبر TEXT را که توسط هسته رد می‌شوند اسمبل کند
ceccomp asm می‌توانید مستقیماً خروجی disasm را به asm بدهید، نیازی به یادگیری دستور زبان جدید نیست؛ ورودی پیش‌فرض را از stdin دریافت می‌کند

ceccomp disasm [-c WHEN] [-a ARCH] [RAW]

واسازی (دیس‌اسمبل کردن) RAW به TEXT. اگر نتوانستید از طریق trace به فیلتر دسترسی پیدا کنید و مجبور به استخراج دستی فیلتر شدید، از این زیردستور برای مشاهده عملکرد فیلتر استفاده کنید.

WHEN

توضیحات این آرگومان در بخش «asm - سرهم‌سازی (asm - ASSEMBLE)» آمده است. دستور disasm ممکن است متن‌های بیشتری را به صورت رنگی شامل برجسته‌سازی نحوی برای TEXT چاپ کند.

ARCH

تنظیم روی هر معماری که توسط libseccomp پشتیبانی می‌شود. برای تعیین چگونگی ترجمه شماره فراخوانی سیستمی فیلترشده در فیلتر RAW به نام فراخوانی سیستمی استفاده خواهد شد (برای نمونه، در معماری x86_64، در صورتی که مقایسه با syscall_nr باشد، شماره 0x3b به execve ترجمه می‌شود؛ مثال ابتدایی بالا را ببینید). مقدار پیش‌فرض روی سیستم شما x86_64 است.

RAW

یک فایل باینری حاوی کدهای خام BPF. در صورت عدم تنظیم، ورودی را از stdin دریافت می‌کند. علامت - به عنوان stdin در نظر گرفته می‌شود. این فایل وابسته به معماری است، بنابراین ممکن است روی معماری‌های متفاوت قابل حمل نباشد.

نکته (Note)

از
نسخه ۴.۰ به بعد، ترتیب بایت‌ها (Endianness) مد نظر قرار می‌گیرد. اگر ترتیب بایت‌های معماری هدف (ARCH) با ترتیب بایت‌های ماشین متفاوت باشد، فیلترها (بخش‌های CODE و K) قبل از رمزگشایی معکوس خواهند شد.


نکته (Note)

ابزار ceccomp تنها زمانی تلاش می‌کند شماره فراخوانی سیستمی را ذیل یک معماری حل‌وفصل کند که در همان خط، معماری قابل تشخیص باشد. در معماری‌های بیگانه (مغایر با معماری تعیین‌شده)، نام معماری بیگانه به ابتدای نام فراخوانی سیستمی اضافه خواهد شد. ممکن است متوجه شوید در برخی موارد seccomp-tools قادر به حل نام است در حالی که ceccomp چنین نیست؛ این رفتار عمدی است زیرا معماری دقیقاً مشخص نشده است.

دستور (Command) تفاوت (Difference)
seccomp-tools disasm در قالب اختصاصی خود دیس‌اسمبل می‌کند؛ هرگز معتبر بودن فیلتر را بررسی نمی‌کند
ceccomp disasm در قالب ceccomp دیس‌اسمبل می‌کند و به طور پیش‌فرض ورودی را از stdin می‌گیرد؛ معماری را به طور دقیق بررسی می‌کند و همیشه نام معماری بیگانه را نمایش می‌دهد

ceccomp emu [-c WHEN] [-a ARCH] [-q] TEXT SYSCALL_NAME/SYSCALL_NR [ARGS[0] ARGS[1] ... ARGS[5] PC]

شبیه‌سازی آنچه اتفاق خواهد افتاد اگر فراخوانی syscall(SYSCALL_NR, ARGS[0], ARGS[1], ..., ARGS[5]) از مقدار PC طبق قواعد شرح‌داده‌شده در TEXT صدا زده شود. از آن برای مشاهده نتیجه بدون نیاز به اجرای واقعی در برنامه یا مواقعی که نمی‌خواهید قاعده فیلتر را به صورت دستی بازرسی کنید استفاده نمایید. این زیردستور می‌تواند برای بررسی خودکار فیلتر به کار رود.

WHEN

توضیحات این آرگومان در بخش «asm - سرهم‌سازی (asm - ASSEMBLE)» آمده است. دستور emu ممکن است متون بیشتری را با رنگ چاپ کند؛ از جمله برجسته‌سازی نحوی برای TEXT و عبارت‌های رد شده.

SYSCALL_NAME/SYSCALL_NR

اگر SYSCALL_NAME (مانند execve) را تنظیم کنید، ابتدا به SYSCALL_NR تحت معماری ARCH ترجمه می‌شود؛ یا اینکه می‌توانید مستقیماً SYSCALL_NR (مانند 59) را مشخص کنید. سپس این شماره با فیلتر bpf آزموده می‌شود تا نتیجه آن فراخوانی سیستمی مشخص گردد. این آرگومان اختیاری نیست و تنظیم آن الزامی است.

ARGS[0-5] and PC

مقادیر ثبات‌ها هنگام فراخوانی سیستمی. برای نمونه، در معماری x86_64، این مقادیر معادل ثبات‌های rdi، rsi، rdx، r10، r8، r9 و rip هستند. مقدار پیش‌فرض آن‌ها ۰ است.

ARCH

توضیحات این آرگومان در بخش «asm - سرهم‌سازی (asm - ASSEMBLE)» آمده است.

TEXT

یک نام فایل می‌گیرد تا مشخص کند کدام فایل حاوی قاعده TEXT باید آزموده شود. توجه داشته باشید که نام فایل نمی‌تواند نادیده گرفته شود زیرا ceccomp نمی‌تواند تشخیص دهد که آیا یک آرگومان مکانی، فراخوانی سیستمی است یا نام فایل. برای اشاره به ورودی استاندارد (stdin) از - استفاده کنید.

-q, --quiet

تنها نتیجه ارزیابی فیلتر را چاپ می‌کند. برای نمونه، اگر آخرین عبارت شبیه‌سازی‌شده return KILL باشد، آنگاه KILL چاپ خواهد شد.
دستور (Command) تفاوت (Difference)
seccomp-tools emu یک فایل RAW را به عنوان ورودی می‌گیرد
ceccomp emu یک فایل TEXT را به عنوان ورودی می‌گیرد و به طور پیش‌فرض از stdin می‌خواند؛ امکان تنظیم PC وجود دارد

ceccomp trace [-c WHEN] [-q] [-o FILE] PROGRAM [program-args]
              [-c WHEN] [-q] -p PID [-s]

خط اول فیلترهایی را که PROGRAM در زمان اجرا با ردگیری آن بارگذاری می‌کند ضبط می‌نماید؛ خط دوم فیلترهای seccomp را از PID استخراج می‌کند یا PID را برای ضبط فیلترهای seccomp بعدی ردگیری می‌نماید؛ پس از واکشی فیلترها، آن‌ها را در قالب TEXT چاپ می‌کند. شما فقط می‌توانید یکی از دو ساختار فوق را انتخاب کنید. اگر اجرای برنامه ساده‌ترین راه برای واکشی فیلترهای bpf است یا برنامه‌ای با فیلترهای seccomp نصب‌شده منتظر ورودی است، از این حالت استفاده کنید.

WHEN

توضیحات این آرگومان در بخش «asm - سرهم‌سازی (asm - ASSEMBLE)» آمده است. دستور trace ممکن است متن‌های بیشتری را به صورت رنگی شامل برجسته‌سازی نحوی برای TEXT چاپ کند.

FILE

زمانی که PROGRAM خروجی زیادی در خطای استاندارد (stderr) تولید کند می‌تواند مفید باشد. ابزار ceccomp به کاربر اجازه می‌دهد تا stdin و stdout را برای محدود کردن ورودی و خروجی PROGRAM ببندد، بنابراین ceccomp هنگام اجرای PROGRAM از stderr برای چاپ پیام‌ها استفاده می‌کند. اگر می‌خواهید TEXT را در فایل دیگری ببینید، FILE را تنظیم کنید. با علامت - مانند stdout رفتار می‌شود.

PROGRAM

برنامه‌ای را که می‌خواهید اجرا کنید مشخص می‌کند، و program-args آرگومان‌های آن هستند؛ دقیقاً مانند اجرای دستور پوسته exec PROGRAM program-args.

PID

شناسه فرآیندی (PID) را که می‌خواهید بازرسی کنید تعیین می‌کند. پارامتر PID با PROGRAM تداخل دارد؛ در یک دستور یا می‌توانید برنامه‌ای را به صورت پویا اجرا کنید یا یک pid را بررسی نمایید. بدون سوییچ -s، حالت trace pid تلاش خواهد کرد فیلتر seccomp موجود در PID را از طریق ptrace(PTRACE_SECCOMP_GET_FILTER) استخراج کند که ممکن است در برخی سیستم‌ها در دسترس نباشد.

-s, --seize

تنها برای حالت TRACE PID در دسترس است. تنظیم این سوییچ رفتار trace pid را تغییر می‌دهد تا به PID متصل (attach) شده و مانند حالت trace prog به ردگیری برای بارگذاری فیلترهای seccomp ادامه دهد. این گزینه در نسخه ۴.۰ اضافه شده است.

-q, --quiet

برای فرونشاندن و جلوگیری از چاپ پیام‌های اضافی [INFO] هنگام انشعاب فرآیند (forking)، خروج فرآیند یا بارگذاری فیلتر seccomp به کار می‌رود. این گزینه در نسخه ۴.۰ اضافه شده است.

نکته (Note)

برای استخراج فیلترها از
PID، مجوز CAP_SYS_ADMIN (بدون سوییچ -s) و احتمالاً CAP_SYS_PTRACE مورد نیاز است؛ ساده‌ترین راه برای کسب آن‌ها اجرای ceccomp با sudo است.


نکته (Note)

از
نسخه ۳.۱ به بعد، قابلیت ردگیری چندین فرآیند معرفی شد و هنگامی که فرآیند تحت ردگیری انشعاب می‌یابد (fork)، تفکیک می‌شود یا خارج می‌گردد، یک پیام INFO اضافی چاپ می‌شود. با اجرای دستوری مانند ceccomp trace -q PROG 2>/dev/null می‌توانید از نمایش آن صرف‌نظر کنید.


نکته (Note)

از
نسخه ۴.۲ به بعد، زیردستور dump به عنوان نام مستعار (alias) برای trace اضافه شد تا سازگاری با seccomp-tools حفظ شود.

دستور (Command) تفاوت (Difference)
seccomp-tools dump تنظیم قالب خروجی امکان‌پذیر است؛ هر فیلتر می‌تواند در فایل متفاوتی ذخیره شود؛ فرآیند PROGRAM را پس از LIMIT بار بارگذاری فیلتر متوقف (kill) می‌کند؛ دستور PROGRAM را درون sh -c کپسوله می‌کند
ceccomp trace یا ceccomp dump همه فیلترها در یک فایل واحد خروجی داده می‌شوند؛ هرگز PROGRAM را kill نمی‌کند؛ برنامه PROGRAM مستقیماً راه‌اندازی می‌شود و نیازی به ./ نیست؛ هنگام fork کردن فرآیند پیام صریح چاپ می‌کند؛ قادر است برای ثبت پویای فیلتر seccomp به pid متصل شود

ceccomp probe [-c WHEN] [-o FILE] [-q] PROGRAM [program-args]

اجرای PROGRAM همراه با program-args برای ضبط نخستین (FIRST) فیلتر seccomp و سپس پایان دادن (kill) به همه فرزندان. از این زیردستور زمانی استفاده کنید که به یک بررسی سریع روی یک برنامه نیاز دارید و می‌خواهید مشکلات احتمالی قواعد seccomp را شناسایی کنید.

تمام توضیحات آرگومان‌ها در بخش «trace - ردگیری فیلتر در زمان اجرا (trace - TRACE FILTER IN RUNTIME)» آمده است.

خروجی این زیردستور نتیجه شبیه‌سازی فراخوانی‌های سیستمی رایج مانند execve، open و غیره است. اگر خود فیلتر قادر به مسدودسازی فراخوانی‌های سیستمی نباشد، در یک نگاه متوجه آن خواهید شد.

خروجی نمونه برای این زیردستور در زیر آورده شده است، نمونه‌های با جزئیات بیشتر در بخش «مثال‌ها (EXAMPLES)» یافت می‌شوند.

open      -> ALLOW
read      -> ALLOW
write     -> ALLOW
execve    -> KILL
execveat  -> KILL
mmap      -> ALLOW
mprotect  -> ALLOW
openat    -> ALLOW
sendfile  -> ALLOW
ptrace    -> ERRNO(1)
fork      -> ALLOW

نکته (Note)

ابزار
seccomp-tools دارای این زیردستور نیست.


مهم (Important)

دستور زبان از
نسخه ۴.۰ به بعد به طور چشمگیری تغییر کرد، چرا که ما تحلیل‌گر واژگانی (lexer) را برای خوانایی بهتر توسط انسان بازنویسی کردیم. بسته‌بندی سرهم‌ساز اکنون با پیشوند # مشخص می‌شود زیرا اکنون یک توضیح (comment) است. همچنین line با label جایگزین شده است، بنابراین تحلیل‌گر واژگانی اکنون به جای شماره خط در فایل TEXT، برای تصمیم‌گیری در مورد مقصد پرش به تعریف برچسب وابسته است.

یک قالب معتبر TEXT در تعریف شبه-EBNF در نشانی زیر شرح داده شده است: https://github.com/dbgbgtf1/Ceccomp/issues/17#issuecomment-3610531705. اگر علاقه‌ای به دانستن چیستی EBNF ندارید، لطفاً به خواندن مثال‌ها ادامه دهید.

عملیات‌های BPF که در زیر شرح داده نشده‌اند توسط هسته ممنوع هستند.

دستور ceccomp disasm موارد زیادی را نمایش می‌دهد، اما برخی از آن‌ها برای asm اختیاری هستند.

#Label  CODE  JT   JF      K
#---------------------------------
 L0001: 0x06 0x00 0x00 0x7fff0000 return ALLOW
#---------------------------------

هر متنی پس از # توسط asm مانند برخی زبان‌های اسکریپت‌نویسی نادیده گرفته می‌شود.

خطوط خالی پذیرفته می‌شوند.

تعریف برچسب (Label) یک شناسه در ابتدای خط است که به : ختم می‌شود، مانند L0001. شناسه رشته‌ای است که با یک حرف الفبا شروع شده و فقط شامل نویسه‌های الفبایی-عددی و خط زیر (_) است. برچسب تنها زمانی ضروری است که مقصد یک goto باشد؛ این برچسب‌های اضافی افزوده‌شده توسط disasm صرفاً برای خوانایی هستند. برای مثال در if ($A == 0) goto somewhere، عبارت somewhere یک برچسب است و باید پس از آن دستور اعلان شود. تعریف برچسب می‌تواند یک خط جداگانه را اشغال کند یا در ابتدای همان خط عبارت دستوری قرار گیرد.

مقادیر CODE، JT، JF و K تولیدشده توسط disasm به وسیله asm نادیده گرفته می‌شوند؛ asm تنها دستور مؤثر پس از K را پردازش می‌کند.


نکته (Note)

تفاوت‌های جزئی بین
ceccomp disasm و seccomp-tools disasm وجود دارد، در زیر یک نمونه کلی آورده شده است. همچنین برخی عبارت‌ها متفاوت هستند، بنابراین خروجی seccomp-tools را بدون بررسی به ceccomp هدایت نکنید.

line  CODE  JT   JF      K
=================================
0000: 0x06 0x00 0x00 0x7fff0000  return ALLOW

ثبات A می‌تواند مستقیماً با ویژگی‌های seccomp تنظیم شود؛ اما به دلیل محدودیت هسته، ثبات X نمی‌تواند مستقیماً با ویژگی‌های seccomp مقداردهی شود.

$A = $arch
$A = $syscall_nr

برای انتساب فیلدهای ۶۴ بیتی به ثبات A، پیشوندهای low_ یا high_ مورد نیاز هستند.

$A = $low_pc
$A = $high_pc
$A = $low_args[0]
$A = $high_args[0]
...
$A = $low_args[5]
$A = $high_args[5]

یک ویژگی ویژه sizeof(struct seccomp_data) است که می‌تواند مستقیماً به A یا X اختصاص یابد.

$A = $scmp_data_len
$X = $scmp_data_len

حافظه موقت ۳۲ بیتی است و برای دسترسی به آن می‌توانید از اندیس هگزادسیمال یا ده‌دهی استفاده کنید. هر دو ثبات A و X قابل انتساب هستند. اختصاص مقادیر بلافصل به A یا X در صورت تعیین صحیح مبنا با "0x" یا "0b"، هر قالبی از اعداد را می‌پذیرد.

$X = $mem[0]
$A = $mem[0xf]
$A = $mem[15] # both hex and dec index are OK
$A = 0
$X = 0x3b
$A = 0b1111
$A = 0333

شما همچنین می‌توانید X را به A یا برعکس اختصاص دهید. اختصاص X یا A به حافظه موقت نیز کاملاً مجاز است.

$A = $X
$X = $A
$mem[3] = $X
$mem[0x4] = $A

عملیات‌های گوناگونی را می‌توان روی ثبات A اعمال کرد.

$A += 30
$A -= 4
$A *= 9
$A /= 1
$A &= 7
$A >>= 6

مقدار سمت راست عملگر می‌تواند X باشد.

$A &= $X
$A |= $X
$A ^= $X
$A <<= $X

همچنین راهی برای منفی کردن مقدار A وجود دارد.

$A = -$A

پرش بدون شرط:

goto L3

پرش شرطی:

if ($A == execve) goto L3
if ($A != 1234) goto L4
if ($A & $X) goto L5
if !($A & 7) goto L6
if ($A <= $X) goto L7

در صورت درستی پرش به ... در صورت نادرستی پرش به ...:

if ($A > $X) goto L3, else goto L4
if ($A >= 4567) goto L5, else goto L6

تنها در شرط‌ها، می‌توانید عدد را با نام فراخوانی سیستمی یا نام معماری جایگزین کنید. در مثال بالا، 0x3b با execve جایگزین شده است. تمام نام‌های فراخوانی سیستمی به شماره فراخوانی سیستمی متناظر در معماری انتخابی شما ترجمه خواهند شد. اگر می‌خواهید نام یک فراخوانی سیستمی را در یک معماری بیگانه (مغایر با معماری انتخابی شما) حل کنید، لطفاً نام معماری و یک نقطه را به ابتدای آن اضافه کنید. برای نمونه، اگر معماری شما x86_64 است و در حال نگارش قواعد برای aarch64 هستید، بدین صورت بنویسید:

if ($A == aarch64.read) goto 5

توجه داشته باشید که اگر معماری را با -a aarch64 به صورت دستی روی aarch64 تنظیم کنید، می‌توانید aarch64. را در دستور ننویسید.

مقدار بازگشتی ثبات A:

return $A

یا بازگرداندن یک مقدار بلافصل، همراه با فیلد اضافی در (). اقداماتی از جمله TRACE، TRAP و ERRNO یک فیلد اضافی را می‌پذیرند؛ در صورت عدم استفاده از ()، به صورت action(0) در نظر گرفته می‌شوند.

return 0x13371337
return KILL
return KILL_PROCESS
return TRAP(123)
return ERRNO(0)
return TRACE
return TRACE(3)
return LOG
return NOTIFY

متن TEXT زیر برای اسمبلر معتبر است و فراخوانی‌های سیستمی execve و execveat را برای معماری amd64 مسدود می‌کند:

$A = $syscall_nr
if ($A == execve) goto forbid
if ($A == execveat) goto forbid
return ALLOW
forbid: return KILL

بخش asm در Ceccomp برای دستیابی به عملکرد بهتر، محدودیت‌هایی را روی TEXT اعمال می‌کند:

1.کاراکتر باینری '\0' (نال‌بایت) نباید در TEXT وجود داشته باشد، زیرا یک فایل متنی است.
2.طول هر خط باید کمتر از ۳۸۴ بایت باشد.
3.یک فایل TEXT باید کمتر از ۱۶۳۸۴ خط داشته باشد.
4.حجم یک فایل TEXT باید کمتر از ۴ مبی‌بایت (4 MiB) باشد.

همچنین برای هر دو زیردستور asm و disasm، تعداد عبارت‌های مؤثر (که می‌توانند به BPF کدگذاری یا رمزگشایی شوند) باید کمتر یا مساوی ۴۰۹۶ باشد؛ این محدودیت توسط هسته لینوکس اعمال می‌شود.

یک نکته جالب درباره ceccomp asm: هر رنگ اولیه ANSI در فایل TEXT، برای نمونه \x1b[31m، هنگام پردازش نادیده گرفته می‌شود.

صفحه راهنما (manpage) قادر به نمایش تصاویر نیست، بنابراین لطفاً برای مشاهده مثال‌ها به نسخه HTML این صفحه مراجعه فرمایید.

برای دسترسی به کدهای منبع به نشانی https://github.com/dbgbgtf1/Ceccomp مراجعه کنید. از ارسال درخواست‌های ادغام (Pull Request) و گزارش مشکلات (Issue) استقبال می‌شود!

حق نشر © ۲۰۲۵-اکنون، توزیع‌شده تحت مجوز GPLv3 یا بالاتر.

dbgbgtf

RocketDev

2026-06-15 ceccomp 4.2.2