Xamarin Monodroid(libmonodroid.so
和libmonosgen-2.0.so
)托管代码或本机代码生成的.so文件是什么?从this SO post看来它们实际上是.NET IL二进制文件(不是本机机器代码)。答案甚至表明Xamarin.Android二进制文件是JIT,可以在任何.NET反编译器中打开。但是,根据我的调查,这似乎与dotPeak或ILSpy无关。
然而,另一个SE网站上的this other post似乎与此相矛盾。应该注意的是,它们通常指的是Android NDK。 那么,是否应该在.NET反编译器或解析器(如Hopper和IDA Pro)上打开本机库(为您提供汇编代码)?
答案 0 :(得分:5)
这些文件,libmonodroid.so和libmonosgen-2.0.so是本机库,是Mono和Xamarin.Android的核心库,这些当然是基于您在APP中支持的ABI / ARCH类型。< / p>
Xamarin.Android应用程序包具有与普通Android软件包相同的结构和布局,并增加了以下内容:
应用程序程序集(包含IL)在程序集文件夹中未压缩存储。
还包括包含Mono运行时的本机库,并为Android运行时(ART)和与MONO&lt; - ART。
在Xamarin.Android 5.1及更高版本中,您可以选择AOT你的程序集,如Xamarin.iOS,因为Apple要求iOS上没有JIT / dynimically生成的代码。 Android的此选项在打包属性中定义,默认为false。因此,对于已经过AOT的程序集,已经生成了基于ABI / ARCH类型的机器代码,并替换了APPs C#IL。