Line 57: |
Line 57: |
| | | |
| * Stop the task with <code>compel_stop_task(int pid)</code> call and keep the return value if it's positive (it contains the task state) | | * Stop the task with <code>compel_stop_task(int pid)</code> call and keep the return value if it's positive (it contains the task state) |
− | * Prepare the infection handler with <code>compel_prepare(int pid)</code> call. The return value is an opaque pointer to <code>struct parasite_ctl()</code> | + | * Prepare the infection handler with <code>compel_prepare(int pid)</code> call. The return value is an opaque pointer to <code>struct parasite_ctl</code> |
| * Run the remote code | | * Run the remote code |
| ** Just execute a system call with <code>compel_syscall(ctl, int syscall_nr, long *ret, int arg ... (6 of them))</code> | | ** Just execute a system call with <code>compel_syscall(ctl, int syscall_nr, long *ret, int arg ... (6 of them))</code> |
Line 63: |
Line 63: |
| * Cure the victim with <code>compel_cure(ctl)</code> and stop using the ctl pointer as it's freed by the call | | * Cure the victim with <code>compel_cure(ctl)</code> and stop using the ctl pointer as it's freed by the call |
| * Resume the task with <code>compel_resume_task(pid)</code> | | * Resume the task with <code>compel_resume_task(pid)</code> |
| + | |
| + | === Infecting === |
| + | |
| + | Infecting the victim with parasite blob needs some special treatment. First, the ctl should be configured with the blob information. Currently there's only one type of blobs, generated by <code>compel hgen</command>. To put this info into ctl one should |
| + | |
| + | * Call <code>compel_parasite_blob_desc(ctl)</code> to get a pointer on <code>struct parasite_blob_desc</code> |
| + | * Fill in the bdesc fields |
| + | ** <code>.parasite_type</code> should be set to <code>COMPEL_BLOB_CHEADER</code> |
| + | ** <code>.hdr.mem</code> should be set to the <code>-s</code> argument of hgen |
| + | ** <code>.hdr.bsize</code> should be set to the sizeof(this symbol) |
| + | ** <code>.hdr.nr_gotpcrel</code> should be set to the <code>-r</code> argument of hgen |
| + | ** Three offsets below should be set to respective offsets generated with the <code>-p</code> argument value |
| + | *** <code>.hdr.parasite_ip_off</code> to <code>COMPEL_H_PARASITE_HEAD(arg)</code> |
| + | *** <code>.hdr.addr_cmd_off</code> to <code>COMPEL_H_PARASITE_CMD(arg)</code> |
| + | *** <code>.hdr.addr_arg_off</code> to <code>COMPEL_H_PARASITE_ARGS(arg)</code> |
| + | ** <code>.hdr.relocs</code> should be set to <code>-v</code> argument (it's an array) |
| + | ** <code>.hdr.nr_relocs</code> should be set to the number of elements in this array (<code>sizeof(arr)/sizeof(arr[0])</code>) |
| | | |
| == See also == | | == See also == |