自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lbq1221119

栖息的企鹅

  • 博客(125)
  • 资源 (1)
  • 收藏
  • 关注

原创 SSCLI中GC垃圾回收源码分析(3) - GarbageCollectGeneration()与SuspendEE

上一节中的GarbageCollect()方法,主要是传递不同的Generation做为参数,来调用GarbageCollectGeneration方法,实现对heap中不同的Generation进行回收。 精简了以后的GarbageCollectGeneration方法以后的代码如下: 在第一次调用该方法的时候,Gen传递过来的参数值为max_generatio

2009-09-14 18:22:00 721

原创 SSCLI中GC垃圾回收源码分析(2) - GarbageCollect()与Spin Lock

继续接着上篇的分析, F11从Fcall中跳出来,就到了sscli20/clr/src/vm/gcsmp.cpp中关于Garbage Collect的最外部的方法GCHeap::GarbageCollect: HRESULTGCHeap::GarbageCollect (int generation, BOOL collect_classes_p){

2009-09-14 18:22:00 936

原创 SSCLI中GC源码分析(1) - EE与BCL之间的调用接口FCall

首先在SSCLI2.0源代码的/clr/src/vm/comutilnative.cpp文件中的GCInterface类的CollectGeneration方法上下个断点,该宏方法主要实现了一个调用转换: /*==============================CollectGeneration===============================*

2009-09-11 11:22:00 928

原创 .Net Micro framework在开发过程中的bugs/problems及解决方案。

1.在开启了主板的DHCP功能之后,由于主板每次重启之后,都会需要一定的时间获取一个IP地址,这个需要一定的时间。而在Visual Studio中debug的时候attach到电路板上面的时候,会reset一下来连接上tinyCLR的debug engine。连接和重试的时间,会小于主板获取IP地址的时间,这个时候,就会出现attach不上主板的现象。解决 这个问题的方法可以

2009-06-17 18:22:00 679

原创 MF中使用GPRS:如何通过一个串口终端实现GPRS Modem拨号上网

在.Net micro framework的一个项目的开发过程中,有一个GPRS的Modem。我们在主板上通过串口,提供了5v的电压。 GPRS Modem设计板如图: 我们使用TXD和RXD,对应到另外一块主板芯片上面的COM4,在开始实现GPRS Modem拨号的过程中,我想是使用GSM 7.07的标准,在Tera Term终端中,经由STK500开发电板连接上G

2009-06-11 00:22:00 954

原创 博客园北京俱乐部第三次活动讲义PPT

周六参加了博客园北京俱乐部第三次活动,作为主讲人之一,我给出的题目是.Net 下垃圾回收算法与实现。内容主要包括三个部分:经典基本垃圾回收算法 CLR中垃圾回收算法介绍 SSCLI中Garbage Collection源码分析PPT可以在这个地址下载到: http://files.cnblogs.com/lbq1221119/GC_Algorithm_insid

2009-05-26 11:22:00 750

原创 ValueType.Equals(null)的底层实现及CLR虚拟机对其结构支持

在定义任何一个ValueType之后,它都是从System.ValueType继承过来的,默认的就继承了Equals方法和GetHashCode方法,在使用的时候,必须主意的是最好重写自定义ValueType的这两个方法,因为可能带来性能上面的严重问题或者是比较的不正确。譬如定义下面这样的一个结构体值类型:     struct TestValueType   

2009-03-03 21:22:00 655

原创 WebService传输数据流及数据交互解析

key words:DPWS,嵌入式设备,WebService,Http,嗅探,Micro Framework。。 为了实现一个嵌入式设备和一个host在IIS server上面的WebService交互,使用了MF3.0里面的DPWS方法。不过这个东西实在是Hard to use。今天就记录下使用的过程中的第一步,首先分析一个Client和一个Webservice是如何交

2009-01-08 18:22:00 2588

原创 托管线程退出之后Dump文件特征

抓到一个dump文件之后,很多托管命令不能用,查看托管线程的时候,现如下显示:  XXXX表示这个托管线程已经被结束了,同时在等待GC的回收。这个时候,用~[N]s命令来切换线程是不可以的。如果是Framework 1.1下,可以使用!dumpallexceptions (!dae)来查看所有的Exception。2.0的SOS下面,咋同样可以使用类似

2008-12-31 18:22:00 557

原创 国外精品研究论文(持续更新)

收集整理看过的一些论文用,不定期更新:MMTk: The Memory Management Toolkithttp://cs.anu.edu.au/~Robin.Garner/mmtk-guide.pdf讲在JikesRVM,一个叫jikes写的虚拟机里面,结合Eclipse来实现一个Gabarge Collector。GCspy: An Adaptable Heap Vis

2008-12-30 23:22:00 659

原创 Random()中具体实现(含种子数组的实现)

Random函数到底是如何返回一个随机数的呢?下面看实现: 调用了一个内部方法: 另外还有在random的构造函数里面实现初始化seed数组: 最后就是涉及到一些变量的定义: seed数组的初始化有点麻烦,其中为什么用55和21俺也不太清楚,估计是定义一个特定的随机取数方法吧。 比较有意思,呵呵。发这篇文章的目的,主要是为了检验下cn

2008-12-25 11:22:00 691

原创 From double Click to Main: PAL initialization

在上一篇文章,讲到了双击一个应用程序之后,操作系统如何初始化Process,以及创建相关的context,最后引导到应用程序的Main方法中。在托管代码中,对于Main的启动还有点不同,有一个PAL层在启动main方法之前启动:#ifdef __cplusplus  extern "C"#endifint __cdecl main(int argc, cha

2008-12-09 21:22:00 627

原创 From double Click to Main: The initialization of Process in OS

         从双击一个应用程序到生成一个OS的process,然后到执行这个exe文件的Main方法,中间做了些什么呢?经常看着call stack的这块灰色的地方,总是想看看其是如何实现的。          Process的creation分为两个级别的创建:NT级别的和Windows级别的。CreateProcess这个方法,就会进行这两个级别的创建,同时创

2008-12-07 22:22:00 712

原创 Microsoft Micro Framework 3.0对Serial Peripheral Interface 的支持

         在3.0的Micro Framework中,咱可以使用SPI(Serial Peripheral Interface)来和外围设备进行通信了。SPI是一种串口总线系统,和I2C,CAN,USB一样。                  使用SPI来进行串口通信中,从设备的通讯模式如下:          两个数据口,一个进一个出,另外两个控制口。

2008-12-05 23:23:00 578

原创 使用CorDbg进行托管调试

         Cordbg是和.Net Framework,以及Windows SDK一起ship的托管代码的调试工具,相对于VS来说,它是一个比较low-level的调试工具.         本文的主要目的,就是看看Cordbg如何来进行托管调试,然后演示下其功能,看看其和其它的托管调试工具,譬如MDBG和windbg+SOS有啥不同.         Mdbg

2008-11-17 22:23:00 1246

原创 CLR内核调试之:Malloc函数实现

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

2008-11-13 20:23:00 2679

原创 Build SSCLI20 under VS2008 full Document (完全手册)

以前build过几次sscli2都成功了,这次换了个新的环境,没想到出了一大堆的问题。折腾了半天,最终搞定,把解决问题的过程和方法都记录下来。 首先说说build的过程中参考过的链接和资源。1.         首先就是sscli自带的文档:Building the Shared Source CLI 2.0 and C# 2.0 Source Tree(/ss

2008-11-12 18:23:00 1112

原创 MethodTable内存空间分配中加法运算算法解析

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

2008-11-05 18:23:00 584

原创 Windbg寻找Managed Founction参数值

         问题源自一个Seminar,如何使用Windbg找到在函数调用的时候,所传递的参数的值。         当使用live Debug模式attach到一个managed Process的时候,默认情况下并不显示函数内部之间的调用,这个时候,需要在这个函数没调用之间给下一个断点。         基于对一个托管函数下断点的两种方法,在上面一片文章里面已经

2008-10-17 19:23:00 777

原创 Windbg在Managed App中设置函数断点的几种方法

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

2008-10-17 19:23:00 787

原创 .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

2008-10-15 12:23:00 492

原创 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-f

2008-08-18 14:23:00 527

原创 handle Table 结构,原理和实现

好久没写了..恩,先写handle table。越学越发现,又回到了崇拜scz,pjf的日子...

2008-08-12 17:23:00 654

原创 Windows Process内存组织结构及重要域解析

最近恶补操作系统和一些底层的知识。遂写篇文章来说说从操作系统的角度来研究Process的一些结构,实现,Porcess的初始化,重要的结构体域的定义,代表的含义,如何组织起来的,等。还有在前段时间研究托管的static字段到底在内存中如何组织的时候,遇到的handle table不熟悉的问题。       一个xp里面的Process,是由几个Eprocess,执行体进程块

2008-07-22 14:23:00 906

原创 ValueTpye boxing及虚方法重写及CallVirt指令实现解析

问题的提出,是源自Justin提出的一个case里面的一个问题,讨论了n久没得到一个答案,昨天justin周一早上一起来就又回忆起了这个问题,看来一直把这个问题放在脑子里面没有放下,佩服啊佩服 ^_^ 遂决定深入研究一番,下面是问题的提出: Boxed value typeIn C#, the value type instance having pure user

2008-06-24 16:23:00 836

原创 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/Mi

2008-06-17 23:24:00 742

原创 宝刀不老:Flash歌曲播放网站MP3地址隐藏机制完全破解

晚上,小落给推荐了一首非常好听的Folk名谣,说是网上很难找到的。:)给了一个地址:http://www.neocha.com/naivete/music!1657.html听了之后,很是喜欢这种风格。然后baidu了一个下载地址发给她,说是这个flash的MP3的地址,后来非要让我如何找到的….冂冏囧….只好拾起尘封了n久的hack技术…             

2008-05-24 23:24:00 687

原创 (纪念国殇).Net Hosting:托管远程线程插入及非托管dll线程插入实现

线程插入,在托管平台上面,是不能直接实现的。如果想通过托管平台在一个非托管的Process里面插入执行一段托管代码,就需要在非托管Process里面启动CLR。我们可以以此为突破口,通过直接调用CLR提供的功能接口来执行托管代码。       最终效果,是实现了非托管平台下托管代码执行的混合型线程插入。       在开发CLR的时候,MS将CLR作为一个COM服务器放

2008-05-19 14:24:00 419

原创 .Net CLR Hosting原理及实践

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

2008-05-17 14:24:00 765

原创 CLR引擎初始化分析

在以前的一篇叫做深入追踪Exe加载过程>的文章里面,从clix的launch函数开始,再到CorExeMain2函数,在CorExeMain2里面有一个叫做CoInitializeEE的函数:       result = CoInitializeEE(COINITEE_DEFAULT | COINITEE_MAIN)       一路找到EnsureEEStarted

2008-05-16 10:24:00 671

原创 使用DbgHelp获取函数调用堆栈之inline assembly(内联汇编)法

如果想自己获取应用程序的Call Stack,就需要查看Stack的内容。Stack Walker,在最近查看SSCLI源码的时候发现这个东西是和Stack Frame紧密联系在一起的。Walking the StackWe could conceivably attempt to unwind the stack ourselves using inline asse

2008-04-18 14:24:00 702

原创 Windbg+Rotor:Managed Process中的各种Special Threads分析

这几天Oracle培训,数据库功力倒是没太大长进,倒是Debug,Windows架构和实现还有CLR的觉悟突飞猛进。开篇前首先3ks下rick,他把他写的一票经典的文章都发到sscli.cnblogs.com团队里面来了。Rick可是我在看雪bbs上面久仰的大牛…由于写的文章时间在创建团队的时间之前,故需要翻到第一页才能看到rick的文章。        首先就从s

2008-04-12 18:24:00 777

原创 使用WinDbg+SOS及WinDbg Script寻找内存中DataTable第M行N列的值

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

2008-03-31 22:24:00 777

原创 WinDbg+Rotor解析WinForm调用堆栈及实现

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

2008-03-25 10:25:00 776

原创 Object内存核心结构及实现完全剖析(MethodTable、EEClass与MethodDescChunk)

无疑,一个Object在CLR中的逻辑结构是相当复杂的。前段时间,写了一篇CLR探索系列:System.Object内存布局模型及实现研究,侧重从System.Object这个基本类的基本内存布局,实现和结构来研究了下。这是远远不够的。今天就从如何存储一个Object中的Field,Method等信息,这些信息的逻辑组织方式和存储的逻辑结构。废话不多说,看看就知道了: 

2008-03-14 19:25:00 2320

原创 Getting the right Exception Context from a Memory dump Fixed

吃饭回来,看到Share Source CLI团队的rss聚合上面Debug团队的juqiang发了一篇文章,说抓了一个minidump出现了:WARNING: Unable to verify timestamp for mscorwks.dll的错误。上次我在查看一个mini Dump的时候,ntdll.dll好像也出现过这个问题,当时把符号文件重新加载了一次就OK了。这次

2008-03-13 14:25:00 675

原创 Solution of Problems in Building sscli via Visual Studio 2008

前些天,发布了一个能够在Visual Studio2005查看sscli源代码的项目文件。不过,在VS2008中编译sscli,会出现一大堆错误。这里,有幸在Jeremy Kuhnes Blog上面找到了一篇文章来解决这个问题。原文链接可以点这里。这里,时间原因就不翻译过来了,希望对sscli团队中研究这个的同志们有帮助,特别希望“装配脑袋”能看到这篇文章。The curre

2008-03-13 08:25:00 664

原创 在Visual Studio 2005中打开Share Source CLI 2.0(Rotor)

我想,有过研究sscli 2.0源码经历的朋友们看到这个标题,一定挺的高兴吧。在以前参阅SSCLI2.0的源码的时候,一直用的EditPlus。感觉在整个VM或者是PAL目录下面寻找对一个类的应用或者一个方法的定义相当的不方便。经常F3搜索整个目录中文件包涵的一个字符串,而且经常一不留神按F3大盘就出来了....这里发布一个项目文件,做为Share Source CLI团队的第

2008-03-11 10:25:00 473

原创 CLR探索系列:托管PE/COFF文件格式侧窥

一直都想写篇文章来说说那些尘封在PE/Coff文件格式下的那些事,还有Metadata和EEClass是如何表现了一个静态的PE格式文件在内存中的映射结构。   在这篇文章里,我不去介绍windows下PE文件的具体格式,也不去介绍一个托管或者是非托管PE文件的加载运行方式,更加不去介绍一个PE文件里面的各个头部以及整体结构的各个部分的含义。 而是侧重于介绍,基于托管环

2008-03-10 10:25:00 697

原创 【开源CLI核心探索团队】sscli探索团队,诚邀请您的加入

    你是否真正的了解你所认识的.NET?Rotor、Mono?       垃圾收集器、类装入器、类型系统、错误报告系统、应用程序域、配件、代理支持、反射、安全性和代码管理器等等等等的架构、实现。在实现这些名词中遇到的有趣的问题和睿智的解决方案。         在对新技术的追踪和应用中,国内的技术爱好者已经能基本上跟上国外同行的步伐。而对于.Net比较核心的基本技术,高级

2008-03-10 07:25:00 782

项目开发总结报告

项目开发总结报告.pdf

2007-08-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除