摘要:问题的提出,是源自Justin提出的一个case里面的一个问题,讨论了n久没得到一个答案,昨天justin周一早上一起来就又回忆起了这个问题,看来一直把这个问题放在脑子里面没有放下,佩服啊佩服 ^_^ 遂决定深入研究一番,下面是问题的提出:Boxed value typeIn C#, the value type instance having pure user data is resided ...
阅读全文
摘要:一直都想写篇文章来说说那些尘封在PE/Coff文件格式下的那些事,还有Metadata和EEClass是如何表现了一个静态的PE格式文件在内存中的映射结构。在这篇文章里,我不去介绍windows下PE文件的具体格式,也不去介绍一个托管或者是非托管PE文件的加载运行方式,更加不去介绍一个PE文件里面的各个头部以及整体结构的各个部分的含义。而是侧重于介绍,基于托管环境下,DotNet对基本的PE/Co...
阅读全文
摘要:在从托管代码里面调用非托管代码的时候,经常会翻阅MSDN找到需要调用的这个程序集里面的关于需要调用方法的签名,还要特别注意方法签名的写法。而且,有的时候我们找到一个非托管代码,对里面的调用方式还没有参考文档。这个boring的过程,以前我们可以利用MSDN,相关模块的参考文档,或者利用PInvoke.net这个网站来搞定。或者,我也见过一些同行找到了一个小工具P/Invoke wizard,用这个...
阅读全文
摘要:在上一篇“CLR探索系列之应用程序域世界”的上篇中,探讨了一些关于应用程序域在托管代码执行过程中的特性和运行机制,以及一些相关的概念。在接下来的中篇里,就从如何实现的角度,换一个角度来探讨程序集和应用程序域是如何加载,执行。以及一些有趣的问题。首先,有一个有趣的“鸡和蛋”的问题。我们知道,一个应用程序集里面的代码在执行的时候,首先被load,然后经过验证,接着对IL代码JIT成为本地代码才能执行。...
阅读全文
摘要:在CLR的世界中,有一系列的令人Amazing的技术和架构。其中,CLR对应用程序在内存中内存分配,执行模型,程序之间的交互等一系列的技术,值得每一个致力于DotNet平台的技术人员深究。编程人员在开发的过程中,如果把程序集的加载(Assemblies Load),反射(Reflection),寄宿(Hosting),应用程序域(AppDomain),这四种技术结合起来使用的话,不仅能更好的使用C...
阅读全文
摘要:AppDomain\sscli\clr\src\vm\appdomain.hppAppDomainStringLiteralMap\sscli\clr\src\vm\stringliteralmap.hBaseDomain\sscli\clr\src\vm\appdomain.hppClassLoader\sscli\clr\src\vm\clsload.hppEEClass\sscli\clr\...
阅读全文
摘要:在使用VS进行托管应用程序的调试的时候,有的时候总感觉有些力不从心。譬如查看一个托管堆或者计算堆栈的时候,VS就不能胜任了。这个时候,Windbg+SOS扩展调试模块就为我们提供了一个很好的解决方案。我们看一段代码:class Program { static void Main(string[] args) { Program b = new Program(); b.test(); Syste...
阅读全文
摘要:这篇文章里,用il语言解释一下static方法和non-static方法在调用的时候,堆栈顶部传递参数的不同形式。首先看一段代码:class TestClass { public static readonly int i = 10; static void Main(string[] args) { TestClass testClass = new TestClass(); TestStat...
阅读全文
摘要:C#中,我们一般情况下认为"+"操作符有两种功能,一种是做算术加,一种是做字符串的连接。今天看到一份文档说,深入解析C#中两个PLUS操作符执行的不同操作,想了想,也的确应该是这样,IL代码实例也表面这个观点是正确的:我们先写一小段测试代码:namespace MSILTest{ class Program { static void Main(string[] args) { string a ...
阅读全文
摘要:本来准备好好写一篇文章深入诠释下Boxing和unboxing的时候发生了些什么,并且好好讲下CLR的线程堆栈执行模型的.累啊,近来事情也比较多,这里就简要的同意回答一下大家提出的问题吧.就使用jiaoer的一段代码来说明问题:namespace MSILTest{ public struct Point { public int x; } class Program { static void ...
阅读全文
摘要:我们写一个很简单的.Net的Console的Application.>>dumpbin -all ConsoleApplication1.exe>c:\b.txt>>notepad c:\b.txt去掉二进制代码之后,我们得到下面的结构和结果:Dump of file ConsoleApplication1.exePE signature foundFile Type...
阅读全文