<div class="gmail_quote">On 9 July 2011 18:57, Jonathan Pryor <span dir="ltr">&lt;<a href="mailto:jonpryor@vt.edu">jonpryor@vt.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Jul 9, 2011, at 1:06 PM, arkain wrote:<br>
&gt; Here&#39;s another possibility. I don&#39;t see what the problem would be in<br>
&gt; embedding ELF objects into a PE following the usual COFF objects. Doesn&#39;t PE<br>
&gt; have a text section that could be used to tag for extraction the native<br>
&gt; portion of the assembly? If that were used, then it would be possible to<br>
&gt; create a PE that contained COFF for the .NET  code and ELF for the native<br>
&gt; code (on linux). The assembly loader in Linux could then extract the ELF<br>
&gt; content into a separate file in a temp directory and load it with dlopen.<br>
<br>
</div>That&#39;s only a halfway solution. One of the Nice Things about C++/CLI (and COM interop, for that matter) is that native clients can load managed assemblies without even realizing it [0]. Things Just Work because LoadLibrary() loads a mixed-mode assembly the same way it loads any other native library, and the loading app doesn&#39;t need to do anything differently.<br>

<br>
Consequently, what you really want is to embed IL/etc. into ELF/Mach-O/etc. file formats, and add support to mono for these alternative file formats. This would allow existing native code to continue to use dlopen(3)/etc. against platform-native libraries which &quot;just happen&quot; to contain IL as well, implicitly pulling in mono (via shared library dependencies, more or less how things work with PE on Windows).<br>

<br>
This was previously discussed on this thread, and given that ELF allows embedding ~arbitrary text/binary sections into .so files (and presumably .dylib does as well), adding support for this likely wouldn&#39;t be _too_ difficult...<br>

<br>
 - Jon<br></blockquote><div><br></div><div>I agree with you here, Jon, and it sounds like quite an interesting exercise.  Of course, one of the other interesting things here would be what compiler do you use to generate a mixed-mode ELF?  Or, how do you embed IL (and associated metadata) into your ELF - what process do you run to create this combination ELF?</div>
<div><br></div><div>Also, not having looked at the Mono PE loader (in depth), I don&#39;t know how hard it would be to abstract the container format away from reading metadata.  And after having glanced at it just now - it doesn&#39;t look /too/ horrendous.</div>
<div> </div></div>-- <br>Tom Spink<br>