随笔分类 -  CLR探索系列

1 2 下一页

SSCLI中GC源码分析(1) - EE与BCL之间的调用接口FCall
摘要:首先在SSCLI2.0源代码的\clr\src\vm\comutilnative.cpp文件中的GCInterface类的CollectGeneration方法上下个断点,该宏方法主要实现了一个调用转换: /*==============================CollectGeneration===============================**Action: Collect... 阅读全文

posted @ 2009-09-11 11:13 lbq1221119 阅读(2582) 评论(20) 推荐(3) 编辑

ValueType.Equals(null)的底层实现及CLR虚拟机对其结构支持
摘要:在定义任何一个ValueType之后,它都是从System.ValueType继承过来的,默认的就继承了Equals方法和GetHashCode方法,在使用的时候,必须主意的是最好重写自定义ValueType的这两个方法,因为可能带来性能上面的严重问题或者是比较的不正确。譬如定义下面这样的一个结构体值类型: struct TestValueType { public int Myint; publ... 阅读全文

posted @ 2009-03-03 21:01 lbq1221119 阅读(2374) 评论(1) 推荐(1) 编辑

From double Click to Main: PAL initialization
摘要:在上一篇文章,讲到了双击一个应用程序之后,操作系统如何初始化Process,以及创建相关的context,最后引导到应用程序的Main方法中。在托管代码中,对于Main的启动还有点不同,有一个PAL层在启动main方法之前启动:#ifdef __cplusplus extern "C"#endifint __cdecl main(int argc, char **argv) { struct _m... 阅读全文

posted @ 2008-12-09 21:12 lbq1221119 阅读(1489) 评论(0) 推荐(0) 编辑

From double Click to Main: The initialization of Process in OS
摘要:从双击一个应用程序到生成一个OS的process,然后到执行这个exe文件的Main方法,中间做了些什么呢?经常看着call stack的这块灰色的地方,总是想看看其是如何实现的。 Process的creation分为两个级别的创建:NT级别的和Windows级别的。CreateProcess这个方法,就会进行这两个级别的创建,同时创建Threads。俺们找到c:\Program Files\Mi... 阅读全文

posted @ 2008-12-07 22:03 lbq1221119 阅读(1926) 评论(5) 推荐(0) 编辑

使用CorDbg进行托管调试
摘要:Cordbg是和.Net Framework,以及Windows SDK一起ship的托管代码的调试工具,相对于VS来说,它是一个比较low-level的调试工具. 本文的主要目的,就是看看Cordbg如何来进行托管调试,然后演示下其功能,看看其和其它的托管调试工具,譬如MDBG和windbg+SOS有啥不同. Mdbg,是一个使用dbgeng.dll的调试接口来开发的一个开源调试工具,版本ms现... 阅读全文

posted @ 2008-11-17 22:23 lbq1221119 阅读(2655) 评论(4) 推荐(0) 编辑

CLR内核调试之:Malloc函数实现
摘要:自从可以动态调试SSCLI之后,发现这个玩意还真是个宝山,越玩越有意思,就像捅开一扇门,发现门后面还有一座宝山……不光CLR的内部实现细节,可以象是放电影一样呈现在眼前,Visual Studio里面的一些底层的技术,还有OS的底层技术,查看起来那是相当的便捷。 这里就说说malloc函数是具体如何实现的,能够F10,F11动态的在VS里面跟踪其一步一步的实现的源码,真... 阅读全文

posted @ 2008-11-13 20:52 lbq1221119 阅读(5642) 评论(11) 推荐(0) 编辑

Build SSCLI20 under VS2008 full Document (完全手册)
摘要:以前build过几次sscli2都成功了,这次换了个新的环境,没想到出了一大堆的问题。折腾了半天,最终搞定,把解决问题的过程和方法都记录下来。首先说说build的过程中参考过的链接和资源。1. 首先就是sscli自带的文档:Building the Shared Source CLI 2.0 and C# 2.0 Source Tree(\sscli20\docs\buildtools\build... 阅读全文

posted @ 2008-11-12 18:48 lbq1221119 阅读(3600) 评论(5) 推荐(0) 编辑

MethodTable内存空间分配中加法运算算法解析
摘要:在分析MethodTable具体分配内存实现的时候,看到了计算MethodTable的大小,然后分配空间的算法。其中有个加法运算实现的非常赞,特地截取出来。 所有的MethodTable的分配,都是通过methodtable中的一个static方法AllocagteNewMT来实现的,该方法定义如下:MethodTable * MethodTable::AllocagteNewMT(EEClass... 阅读全文

posted @ 2008-11-05 18:12 lbq1221119 阅读(2095) 评论(5) 推荐(0) 编辑

Windbg寻找Managed Founction参数值
摘要:问题源自一个Seminar,如何使用Windbg找到在函数调用的时候,所传递的参数的值。 当使用live Debug模式attach到一个managed Process的时候,默认情况下并不显示函数内部之间的调用,这个时候,需要在这个函数没调用之间给下一个断点。 基于对一个托管函数下断点的两种方法,在上面一片文章里面已经讲过了,这里就显的容易多了。首先还是找上篇文章里面的程序作为例子:class ... 阅读全文

posted @ 2008-10-17 19:08 lbq1221119 阅读(2571) 评论(6) 推荐(0) 编辑

Windbg在Managed App中设置函数断点的几种方法
摘要:本文介绍两种使用Windbg在Managed App中设置断点的方法。一种是在live Debug的时候,attach到了Process之后。另外一种是动态调试的时候,如何给几个模块的特定方法下一个断点。 使用Windbg在Native Code里面下断点是比较方便的,bp加上一个内存地址就可以做到。但是在托管的时候给一个方法下一个断点稍微有点麻烦。因为Windbg是一个native Debug... 阅读全文

posted @ 2008-10-17 19:05 lbq1221119 阅读(2839) 评论(6) 推荐(0) 编辑

.Net 2.0内存对象布局详析及与1.1变化比较
摘要:写本文主要两个目的,一个是解析下2.0下的对象在内存里面究尽是个什么样子的布局,使用windbg和sos来show下内存里面的bit是如何组织其来的。另外一个就是比较下和.Net Framework 1.1你面的内存布局有什么区别,修正下“Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects”里... 阅读全文

posted @ 2008-10-15 12:04 lbq1221119 阅读(3260) 评论(20) 推荐(0) 编辑

Handle table中CAS操作与A-B-A Problem解析
摘要:在研究handle table的时候顺便研究的东西。Baidu了下,发现国内这方面的资料几乎没得,然后就准备瞎bb下,为下面的一篇介绍handle table的结构做准备。关于lock-free data structure。以及解决这个问题中使用的CAS(compare and swap)操作。以及使用CAS操作的时候出现的A-B-A Problem。对于lock-free data struc... 阅读全文

posted @ 2008-08-18 14:36 lbq1221119 阅读(4775) 评论(8) 推荐(0) 编辑

ValueTpye boxing及虚方法重写及CallVirt指令实现解析
摘要:问题的提出,是源自Justin提出的一个case里面的一个问题,讨论了n久没得到一个答案,昨天justin周一早上一起来就又回忆起了这个问题,看来一直把这个问题放在脑子里面没有放下,佩服啊佩服 ^_^ 遂决定深入研究一番,下面是问题的提出:Boxed value typeIn C#, the value type instance having pure user data is resided ... 阅读全文

posted @ 2008-06-24 16:59 lbq1221119 阅读(2369) 评论(15) 推荐(0) 编辑

WinDbg+SOS:Web服务器High CPU Hang(100%)实例分析
摘要:下午,msn上面一个朋友发了一个dump文件过来,说是Web服务器的CPU使用率在100%,找不到问题在什么地方,让帮忙看看,遂让把dump文件传过来,找找问题出在哪儿。 Framework2.0,Windows 2k的OS。 加载了Dump文件之后,接着加载2.0版本的SOS扩展调试模块: .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\S... 阅读全文

posted @ 2008-06-17 23:36 lbq1221119 阅读(4450) 评论(25) 推荐(1) 编辑

.Net CLR Hosting原理及实践
摘要:在开发CLR的时候,MS实际上是将CLR相关的功能作为一个COM服务实现在一个DLL里面。对这个DLL的选择,是由垫片来选择的。MS为CLR定义了一个标准的COM接口,并且为该接口和COM服务指定了GUID。虽然没有垫片mscoree.dll的实现代码,但是咱可以看看头文件….在MSCorEE头文件里面,定义了一些GUID和非托管的最重要的ICorRuntimeHost接口。任何windows应用... 阅读全文

posted @ 2008-05-17 14:07 lbq1221119 阅读(4395) 评论(17) 推荐(2) 编辑

CLR引擎初始化分析
摘要:在以前的一篇叫做<深入追踪Exe加载过程>的文章里面,从clix的launch函数开始,再到CorExeMain2函数,在CorExeMain2里面有一个叫做CoInitializeEE的函数: result = CoInitializeEE(COINITEE_DEFAULT | COINITEE_MAIN) 一路找到EnsureEEStarted,这个是确保EE启动的方法。在这个方法... 阅读全文

posted @ 2008-05-16 10:59 lbq1221119 阅读(3462) 评论(10) 推荐(0) 编辑

使用DbgHelp获取函数调用堆栈之inline assembly(内联汇编)法
摘要:如果想自己获取应用程序的Call Stack,就需要查看Stack的内容。Stack Walker,在最近查看SSCLI源码的时候发现这个东西是和Stack Frame紧密联系在一起的。Walking the StackWe could conceivably attempt to unwind the stack ourselves using inline assembly. But stac... 阅读全文

posted @ 2008-04-18 14:58 lbq1221119 阅读(3864) 评论(3) 推荐(0) 编辑

Windbg+Rotor:Managed Process中的各种Special Threads分析
摘要:这几天Oracle培训,数据库功力倒是没太大长进,倒是Debug,Windows架构和实现还有CLR的觉悟突飞猛进。开篇前首先3ks下rick,他把他写的一票经典的文章都发到sscli.cnblogs.com团队里面来了。Rick可是我在看雪bbs上面久仰的大牛…由于写的文章时间在创建团队的时间之前,故需要翻到第一页才能看到rick的文章。 首先就从sscli中TLS预先定义的一个结构体说起了: ... 阅读全文

posted @ 2008-04-12 18:12 lbq1221119 阅读(3487) 评论(11) 推荐(0) 编辑

使用WinDbg+SOS及WinDbg Script寻找内存中DataTable第M行N列的值
摘要:DataTable在内存中是如何存储一张表的结构的呢?如何使用Windbg直接在内存中找到一个DataTable里面的第M列第N行的值呢?这的确是一个比较有趣的问题^_^下面的内容,主要是讲如何用windbg+sos来看看一个DataTable在内存中是如何存储的,以及寻找内存中一个DataTable特定的行列的一个单元的值是多少。同时,还有一点Windbg Script的使用。找一个小白鼠先: ... 阅读全文

posted @ 2008-03-31 22:03 lbq1221119 阅读(3508) 评论(18) 推荐(0) 编辑

WinDbg+Rotor解析WinForm调用堆栈及实现
摘要:前段写过一篇文章“CLR探索系列:深入追踪托管exe加载执行过程”,在那篇文章中,主要是侧重静态代码的分析,追踪源代码的流程一步一步看是如何实现的。这次,写一篇文章,结合Windbg,从一个托管应用程序执行的调用堆栈开始,追踪其调用堆栈中的线索,以及这些托管应用程序执行中调用的功能实现,来展示托管代码的加载和执行的流程和实现。首先还是找一个小白鼠:public partial class Form... 阅读全文

posted @ 2008-03-25 10:50 lbq1221119 阅读(3704) 评论(2) 推荐(0) 编辑

1 2 下一页

导航