<br><div class="gmail_quote">On 9 July 2011 19:31, Alex Corrado <span dir="ltr">&lt;<a href="mailto:alexander.corrado@gmail.com" target="_blank">alexander.corrado@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div>On Sat, Jul 9, 2011 at 2:12 PM, Tom Spink &lt;<a href="mailto:tspink@gmail.com" target="_blank">tspink@gmail.com</a>&gt; wrote:<br>
&gt; I agree with you here, Jon, and it sounds like quite an interesting<br>
&gt; exercise. Of course, one of the other interesting things here would be what<br>
&gt; compiler do you use to generate a mixed-mode ELF?  Or, how do you embed IL<br>
&gt; (and associated metadata) into your ELF - what process do you run to create<br>
&gt; this combination ELF?<br>
<br>
</div>That would be nice and easy if the linker supported adding arbitrary<br>
sections. Then we&#39;d just need a tool to extract the CLI parts from the<br>
PE file and create a binary blob that could be passed off to the<br>
linker. We would also need a way to generate native stubs that would<br>
load and initialize the mono runtime and a way to expose the managed<br>
API as native entry points. Since the CLI is OO, it would make sense<br>
to expose the managed API in a way that would be consumable from some<br>
native object system, like C++, Obj-C, or GObject.<br></blockquote><div><br></div><div>Well, ld is our friend here.  You can pretty much do any sort of linking you want, given the right linker script.</div><div><br></div>
<div>And embedding a wee stub to load mono should be easy enough.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>
&gt; Also, not having looked at the Mono PE loader (in depth), I don&#39;t know how<br>
&gt; hard it would be to abstract the container format away from reading<br>
&gt; metadata.  And after having glanced at it just now - it doesn&#39;t look /too/<br>
&gt; horrendous.<br>
<br>
</div>Would this really be necessary? Wouldn&#39;t it be cleaner if the<br>
ELF/Mach-o binary just linked with libMono and we exposed a native<br>
entry point that would use the Mono embedding APIs to call the managed<br>
Main method?<br></blockquote><div><br></div><div>Hmm, I think probably yes, because at some point Mono still needs to read the metadata header, and associated metadata tables, which means it&#39;ll need to do a bit o&#39; parsing to get the location of those structures into memory.  Provided, however, the metadata format is kept exactly the same, then all that would need to happen is to locate the start of the metadata header, and (luckily) all the metadata just follows that.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This does, indeed sound like quite an interesting exercise.<br>
<br>
Best,<br>
<font color="#888888"><br>
Alex Corrado<br>
</font></blockquote></div><br>-- <br>Tom Spink<br>