| COMPEL(1) | CRIU Manual | COMPEL(1) |
نام (NAME)
compel - اجرای کد انگل در داخل یک فرآیند دیگر
خلاصه دستور (SYNOPSIS)
compel hgen [option ...]
compel plugins [PLUGIN_NAME ...]
compel [--compat] includes | cflags | ldflags
compel [--compat] [--static] libs
توضیحات (DESCRIPTION)
ابزار compel یک ابزار کاربردی برای اجرای کد دلخواه (که کد انگل یا parasite code نیز نامیده میشود) در بستر و زمینه یک فرآیند بیگانه دیگر است. کد انگل پس از کامپایل با پرچمهای compel و بستهبندی، میتواند در زمینه تسکهای دیگر اجرا شود. در حال حاضر تنها یک روش برای بارگذاری باینری انگل در تسک قربانی با استفاده از libcompel.a وجود دارد که هدر سی (c-header) نامیده میشود.
آرگومانها (ARGUMENTS)
آرگومانهای مکانی (Positional Arguments)
hgen
plugins
ldflags
cflags
includes
libs
گزینهها (OPTIONS)
-f, --file FILE
-o, --output FILE
-p, --prefix NAME
-l, --log-level NUM
-h, --help
-V, --version
نمونههای کد منبع (SOURCE EXAMPLES)
کد انگل (Parasitic Code)
#include <compel/plugins/std.h>
int parasite_trap_cmd(int cmd, void *args); // فراخوانیشده توسط ()compel_run_in_thread
int parasite_daemon_cmd(int cmd, void *arg); // فراخوانیشده توسط ()compel_rpc_call و ()compel_rpc_call_sync
void parasite_cleanup(void); // هنگام تخلیه انگل توسط ()compel_cure فراخوانی میشود
کد آلودهکننده (Infecting code)
کد انگل کامپایل شده و با استفاده از compel به یک هدر تبدیل میشود و در اینجا قرار میگیرد.
#include <compel/infect.h>
#include "parasite.h"
مراحل زیر برای آلوده کردن فرآیند قربانی انجام میشوند:
- •
- توقف تسک: int compel_stop_task(int pid);
- •
- آمادهسازی دستگیره آلودگی: struct parasite_ctl *compel_prepare(int pid);
- •
- اجرای فراخوانی سیستمی: int compel_syscall(ctl, int syscall_nr, long *ret, int arg ...);
- •
- آلوده کردن قربانی: int compel_infect(ctl, nr_thread, size_of_args_area);
- •
- درمان قربانی: int compel_cure(ctl); // اشارهگر ctl با این فراخوانی آزاد میشود
- •
- ازسرگیری قربانی: int compel_resume_task(pid, orig_state, state) یا int compel_resume_task_sig(pid, orig_state, state, stop_signo). // تابع ()compel_resume_task_sig میتواند در حالتی که قربانی در وضعیت متوقف است استفاده شود. مقدار stop_signo را میتوان با فراخوانی ()compel_parse_stop_signo خواند.
اشارهگر ctl باید با فراخوانی PREFIX_setup_c_header() همراه با ctl به عنوان آرگومان، با اطلاعات باینری پیکربندی شود. PREFIX آرگومانی است که هنگام فراخوانی hgen به گزینه -p داده شده است؛ در غیر این صورت از نام پرونده استخراج میشود.
مثالها (EXAMPLES)
برای تولید یک پرونده هدر (h.) از یک پرونده باینری انگل (po.) از دستور زیر استفاده کنید:
compel hgen -f parasite.po -o parasite.h
پرونده parasite.po با کامپایل کردن کد منبع انگل با فلگهای compel و لینک کردن آن با پلاگینهای compel به دست میآید.
نویسنده (AUTHOR)
تیم توسعه CRIU.
| 07/29/2025 | criu 4.1.1 |