Line 26: |
Line 26: |
| </pre> | | </pre> |
| | | |
− | If the code consists of more than one source file, they all need to be compiled,
| + | Don't forget to put <code>compel/include/uapi/</code> directory into include paths. |
− | then linked together with the proper linker flags for compel:
| |
| | | |
− | <pre>
| + | Then link the parasite binary. Include all the .o files needed and compel plugins <code>std</code> and <code>fds</code> by using compel linker script. |
− | $ ld foo1.o foo2.o -o foo.o $(compel ldflags)
| |
− | </pre> | |
− | | |
− | Finally, pack the binary. Packing links the object file with [[compel plugins]].
| |
| | | |
| <pre> | | <pre> |
− | $ compel pack foo.o -o foo.compel.o [-l ''plugin'' [...]] | + | $ ld foo1.o foo2.o compel/plugins/std.built-in.o compel/plugins/fds.built-ind.o -T compel/arch/$ARCH/scripts/compel-pack.lds.S -o parasite.po |
| </pre> | | </pre> |
| | | |
− | The <code>-l</code> option specifies plugins to be added to the packed binary. The <code>std</code> plugin is added by default, i.e. it does not require any flags. | + | The .po blob can now be loaded as parasite. |
− | | |
− | Now, the <code>foo.compel.o</code> is ready for remote execution (note that <code>foo.o</code> was not).
| |
| | | |
| == Running == | | == Running == |