<div dir="ltr">Alright. Let&#39;s say we do &quot;LD_PRELOAD=/lib/libcriume.so ./process_to_be_checkpointed arg1 arg2&quot; with libcriume.so containing function pre_restore_plugin(). You are suggesting that criu code will parse ELF libcriume.so to get address of the symbol &quot;pre_restore_plugin&quot; and look at calculate the load address looking at /proc/&lt;pid&gt;/maps? Let me know if my understanding is correct. Thanks!<div><br></div><div>-Lilo<br><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 11, 2015 at 4:11 AM, Pavel Emelyanov <span dir="ltr">&lt;<a href="mailto:xemul@parallels.com" target="_blank">xemul@parallels.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 08/10/2015 09:42 PM, CRIU criu wrote:<br>
&gt; Can we also use the plugin to call a specific function in the target process?<br>
<br>
</span>Sure.<br>
<span class=""><br>
&gt; If yes, does it have to be a fixed address or the plugin could be made aware of<br>
&gt; the function address dynamically (linking?)<br>
<br>
</span>Depends on how you write the plugin code. For ELF binaries it&#39;s<br>
typically possible to resolve a routine address by its name.<br>
<br>
If we&#39;re starting to talk about making criu communicate to the<br>
process it dumps/restores, I would go the other way -- I&#39;d make<br>
a library (libcriume.so or smth like this) with which a binary<br>
can be linked. In this library there should be a pre-defined set<br>
of symbols that will be called/used by criu on dump/restore.<br>
IOW -- it will be a plugin to programs, not to criu itself.<br>
<span class="im HOEnZb"><br>
&gt; On Thu, Jun 11, 2015 at 11:27 AM, CRIU criu &lt;<a href="mailto:criuport@gmail.com">criuport@gmail.com</a> &lt;mailto:<a href="mailto:criuport@gmail.com">criuport@gmail.com</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;     Thanks! Let me take a look.<br>
&gt;<br>
</span><div class="HOEnZb"><div class="h5">&gt;     On Thu, Jun 11, 2015 at 6:01 AM, Pavel Emelyanov &lt;<a href="mailto:xemul@parallels.com">xemul@parallels.com</a> &lt;mailto:<a href="mailto:xemul@parallels.com">xemul@parallels.com</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;         On 06/11/2015 05:06 AM, CRIU criu wrote:<br>
&gt;         &gt; Hi,<br>
&gt;         &gt;<br>
&gt;         &gt; How can I add custom initialization code to restorer before unmap and sigreturn?<br>
&gt;         &gt; I&#39;m trying to checkpoint /restore a single Android process. For external dependencies, I<br>
&gt;         &gt; need to initialize Java objects collected as a part of memory dump by CRIU. The<br>
&gt;         &gt; initialization code involves making a bunch of syscalls. Can I do this by creating a<br>
&gt;         &gt; custom restorer blob or inside cr_restore_tasks() in cr-restore.c? Thanks!<br>
&gt;<br>
&gt;         Hm :) Nice request. Right now there&#39;s no such ability in CRIU and I don&#39;t<br>
&gt;         see _easy_ solution. Complex solution can be plugin, that gets loaded into<br>
&gt;         restorer blob and that&#39;s called at the very end of restorer, but this would<br>
&gt;         require non-trivial preparation of the plugin itself. We&#39;ve played with<br>
&gt;         such things before, you can dig deep into the pie/ code and into the<br>
&gt;         compel project (<a href="https://github.com/xemul/compel" rel="noreferrer" target="_blank">https://github.com/xemul/compel</a>) for details :)<br>
&gt;<br>
&gt;         -- Pavel<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br></div>