2008年3月10日

摘要: 一直都想写篇文章来说说那些尘封在PE/Coff文件格式下的那些事,还有Metadata和EEClass是如何表现了一个静态的PE格式文件在内存中的映射结构。在这篇文章里,我不去介绍windows下PE文件的具体格式,也不去介绍一个托管或者是非托管PE文件的加载运行方式,更加不去介绍一个PE文件里面的各个头部以及整体结构的各个部分的含义。而是侧重于介绍,基于托管环境下,DotNet对基本的PE/Co... 阅读全文
posted @ 2008-03-10 10:02 lbq1221119 阅读(2267) 评论(3) 推荐(0) 编辑
摘要: 你是否真正的了解你所认识的.NET?Rotor、Mono?垃圾收集器、类装入器、类型系统、错误报告系统、应用程序域、配件、代理支持、反射、安全性和代码管理器等等等等的架构、实现。在实现这些名词中遇到的有趣的问题和睿智的解决方案。 在对新技术的追踪和应用中,国内的技术爱好者已经能基本上跟上国外同行的步伐。而对于.Net比较核心的基本技术,高级调试技术,FrameWork架构细节及其实现的研究,与国外... 阅读全文
posted @ 2008-03-10 07:43 lbq1221119 阅读(4172) 评论(90) 推荐(0) 编辑

2008年3月9日

摘要: 上次提出了一个问题:一个托管进程,如果运行在一个双核CPU的机器上,GC是运行于Server GC模式,在假设CPU没有Hyper thread功能的话,这个托管进程会有几个GC Thread?可以用调试工具来证明你的判断吗?这个问题的答案,想必很多人也知道,几个cpu就几个GC Thread。不过接下来的内容,主要侧重于,变换几种不同的方式来解决这个问题:方法一:在WinDBG中,加载SOS模块... 阅读全文
posted @ 2008-03-09 14:39 lbq1221119 阅读(3164) 评论(18) 推荐(0) 编辑

2008年2月29日

摘要: 近日研究CLR和GC,在msdn blog上面看到MS CLR测试小组的一个女技术员提出了十几个问题,感觉问题都挺有趣,也有一定的难度,遂加以修改,删除了几个又添加了几个,广泛征集回答 ^_^1. 一个托管进程,如果运行在一个双核CPU的机器上,GC是运行于Server GC模式,在假设CPU没有Hyper thread功能的话,这个托管进程会有几个GC Thread?可以用调试工具来证明你的判断... 阅读全文
posted @ 2008-02-29 09:58 lbq1221119 阅读(3855) 评论(14) 推荐(2) 编辑

2008年2月27日

摘要: 首先推荐一本书:Garbage Collection: Algorithms for Automatic Dynamic Memory Management (Hardcover)如果对GC的自动内存管理算法比较感兴趣的话,可以参阅下这本书。在亚马逊上的链接:http://www.amazon.com/exec/obidos/ASIN/0471941484/qid=1030028976/sr=1-... 阅读全文
posted @ 2008-02-27 13:42 lbq1221119 阅读(3382) 评论(6) 推荐(1) 编辑

2008年2月22日

摘要: 在CLR的垃圾回收子系统中,Card Table和Brick Table是两个比较有意思的表。 在GC的过程中,一个Heap在运行了一段时间以后,已经分配的空间就会越来越大。在进行了一次局部代或者是完全的垃圾回收以后,就会涉及到一个GC堆的类似碎片整理的概念。整理优化一次GC Heap。同时,这种机制保证了譬如一个IIS Server在长时间的运行过程中的稳定性并且优化了其内存管理。 这样的好处... 阅读全文
posted @ 2008-02-22 09:05 lbq1221119 阅读(3357) 评论(7) 推荐(0) 编辑

2008年2月20日

摘要: 在CLR探索系列的研究DotNet下的垃圾回收器这几个博文里,就先说说GC Heap结构吧,至于垃圾回收的详析算法实现,以后再写了。在一个托管进程被创建以后,在托管进程的内存空间里面,包含了System Domain,Shared Domain,Default Domain,以及一系列的Heap,有Process的Heap,JIT Code Heap,GC Heap以及LOH。在DotNet的CL... 阅读全文
posted @ 2008-02-20 10:51 lbq1221119 阅读(5429) 评论(17) 推荐(0) 编辑

2008年1月18日

摘要: 只有深究最本质的东西,才能把握最本质的东西。有很多朋友都分析过System.Object作为Dotnet Framework里面的一个基类,她的特性、方法特点及其相关的概念,这篇博文里面,我就从System.Object这个基类的定义以及底层实现的角度,探索这个基类对象在内存里面的布局模型,探索这个基类最本质的面目。首先,从一个Type的实例在内存里面的布局模型、以及一个实例的各个部分在一个托管进... 阅读全文
posted @ 2008-01-18 21:47 lbq1221119 阅读(5476) 评论(21) 推荐(1) 编辑

2008年1月16日

摘要: 在从托管代码里面调用非托管代码的时候,经常会翻阅MSDN找到需要调用的这个程序集里面的关于需要调用方法的签名,还要特别注意方法签名的写法。而且,有的时候我们找到一个非托管代码,对里面的调用方式还没有参考文档。这个boring的过程,以前我们可以利用MSDN,相关模块的参考文档,或者利用PInvoke.net这个网站来搞定。或者,我也见过一些同行找到了一个小工具P/Invoke wizard,用这个... 阅读全文
posted @ 2008-01-16 11:05 lbq1221119 阅读(13428) 评论(27) 推荐(3) 编辑

2008年1月10日

摘要: 这几日看Exchange server 的一些文档,对其的安全控制和相关的协议比较感兴趣。遂在网上找了一些如何配置Kerberos来抵御Sniffer的嗅探,以及一个Sniffer如何来获取Kerberos的交互信息,和如何保护主机使其避免针对Kerberos的攻击。放一些资料的链接保存在blog上面:Protect Yourself Against Kerberos Attackshttp://... 阅读全文
posted @ 2008-01-10 11:04 lbq1221119 阅读(531) 评论(0) 推荐(0) 编辑

2007年12月23日

摘要: Last time ,when I was asked what is the diff between Readonly and Const,I was really ashamed that I said don’t know on explaining the exact difference between this two simple key word…过后,特意研究了下这两个关键字究... 阅读全文
posted @ 2007-12-23 00:38 lbq1221119 阅读(1236) 评论(5) 推荐(0) 编辑

2007年12月21日

摘要: 在上一篇“CLR探索系列之应用程序域世界”的上篇中,探讨了一些关于应用程序域在托管代码执行过程中的特性和运行机制,以及一些相关的概念。在接下来的中篇里,就从如何实现的角度,换一个角度来探讨程序集和应用程序域是如何加载,执行。以及一些有趣的问题。首先,有一个有趣的“鸡和蛋”的问题。我们知道,一个应用程序集里面的代码在执行的时候,首先被load,然后经过验证,接着对IL代码JIT成为本地代码才能执行。... 阅读全文
posted @ 2007-12-21 17:24 lbq1221119 阅读(4013) 评论(6) 推荐(1) 编辑

2007年12月12日

摘要: 在CLR的世界中,有一系列的令人Amazing的技术和架构。其中,CLR对应用程序在内存中内存分配,执行模型,程序之间的交互等一系列的技术,值得每一个致力于DotNet平台的技术人员深究。编程人员在开发的过程中,如果把程序集的加载(Assemblies Load),反射(Reflection),寄宿(Hosting),应用程序域(AppDomain),这四种技术结合起来使用的话,不仅能更好的使用C... 阅读全文
posted @ 2007-12-12 14:18 lbq1221119 阅读(4305) 评论(9) 推荐(1) 编辑

2007年12月5日

摘要: 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\... 阅读全文
posted @ 2007-12-05 22:42 lbq1221119 阅读(722) 评论(1) 推荐(0) 编辑

2007年12月2日

摘要: 在使用VS进行托管应用程序的调试的时候,有的时候总感觉有些力不从心。譬如查看一个托管堆或者计算堆栈的时候,VS就不能胜任了。这个时候,Windbg+SOS扩展调试模块就为我们提供了一个很好的解决方案。我们看一段代码:class Program { static void Main(string[] args) { Program b = new Program(); b.test(); Syste... 阅读全文
posted @ 2007-12-02 22:25 lbq1221119 阅读(4001) 评论(9) 推荐(1) 编辑

2007年11月19日

摘要: 这篇文章里,用il语言解释一下static方法和non-static方法在调用的时候,堆栈顶部传递参数的不同形式。首先看一段代码:class TestClass { public static readonly int i = 10; static void Main(string[] args) { TestClass testClass = new TestClass(); TestStat... 阅读全文
posted @ 2007-11-19 14:02 lbq1221119 阅读(1609) 评论(4) 推荐(0) 编辑

2007年11月11日

摘要: C#中,我们一般情况下认为"+"操作符有两种功能,一种是做算术加,一种是做字符串的连接。今天看到一份文档说,深入解析C#中两个PLUS操作符执行的不同操作,想了想,也的确应该是这样,IL代码实例也表面这个观点是正确的:我们先写一小段测试代码:namespace MSILTest{ class Program { static void Main(string[] args) { string a ... 阅读全文
posted @ 2007-11-11 23:44 lbq1221119 阅读(2871) 评论(21) 推荐(0) 编辑
摘要: 改进的测试版本在最后的整理中,短时间内会发布正式的测试版本.该工具可以支持各种格式的Excel数据导入到Oracle数据库中,支持字段自定义.内置各种数据库接口,功能还在继续完善中: 阅读全文
posted @ 2007-11-11 16:31 lbq1221119 阅读(696) 评论(3) 推荐(0) 编辑

2007年10月28日

摘要: 本来准备好好写一篇文章深入诠释下Boxing和unboxing的时候发生了些什么,并且好好讲下CLR的线程堆栈执行模型的.累啊,近来事情也比较多,这里就简要的同意回答一下大家提出的问题吧.就使用jiaoer的一段代码来说明问题:namespace MSILTest{ public struct Point { public int x; } class Program { static void ... 阅读全文
posted @ 2007-10-28 14:17 lbq1221119 阅读(1094) 评论(13) 推荐(0) 编辑
摘要: 我们写一个很简单的.Net的Console的Application.>>dumpbin -all ConsoleApplication1.exe>c:\b.txt>>notepad c:\b.txt去掉二进制代码之后,我们得到下面的结构和结果:Dump of file ConsoleApplication1.exePE signature foundFile Type... 阅读全文
posted @ 2007-10-28 13:40 lbq1221119 阅读(1542) 评论(3) 推荐(0) 编辑

2007年10月19日

摘要: 在上一篇的博文中,我以一个具有代表性的IL base instruction, ldc 指令,来介绍了IL语言中最基本的一类指令及其参数的使用方法.大家反映还不错.这里,就再写一篇博文,用一个应用程序的实例来深入的说明一番CLR环境下的IL语言的语法,基本运行机制和原理.首先,找一段IL语言的例子,从codeproject找了一段IL程序修改了下.method static void main()... 阅读全文
posted @ 2007-10-19 23:28 lbq1221119 阅读(3319) 评论(18) 推荐(0) 编辑

2007年10月17日

摘要: 首先来看一下一个有代表性的: ldc.i4 num 这个指令.在这个指令中,num被放到了堆栈上面:Note that there are special short (and hence more efficient) encodings for the integers -128 through 127, and especially short encodings for -1 throug... 阅读全文
posted @ 2007-10-17 09:06 lbq1221119 阅读(6892) 评论(6) 推荐(0) 编辑

2007年10月15日

摘要: 关于Attribute的详细知识,我就不多说了.大家可以参考dudu和anytao的一个系列里面的介绍,比较经典的探讨了Attribute的一些生成和运行机制.在这里,我只想从几个侧面来探讨下CLR环境下的Attribute.首先,我们来看一个Reflecting in Attribute的例子:using System;using System.Reflection;public class A... 阅读全文
posted @ 2007-10-15 16:26 lbq1221119 阅读(466) 评论(0) 推荐(0) 编辑

2007年10月13日

摘要: 我们先写个最简单的Console App,打印出一行字符:using System;using System.Collections.Generic;using System.Text;namespace ILTest{ class Program { static void Main(string[] args) { Console.WriteLine("Test App for IL"); }... 阅读全文
posted @ 2007-10-13 22:52 lbq1221119 阅读(1049) 评论(3) 推荐(0) 编辑

2007年10月12日

摘要: JS实现在一个页面里面加入类似"添加附件"的功能的一个小实例. 阅读全文
posted @ 2007-10-12 15:30 lbq1221119 阅读(1018) 评论(0) 推荐(0) 编辑

2007年10月10日

摘要: 开发人员编写的受控代码在被编译成MSIL之后,在运行时会被再编译为原生代码。有两种方式可以完成这个目标,一种是在运行期逐一编译Methods的MSIL代码,另一种是在装配件被运行前整批的全部编译为原生代码。将MSIL编译为原生代码的一个最常见的办法,就是先让CLR装在装配件,然后在每个Method第一次被调用时编译之。由于每个Method都只在第一次被调用时才被编译,所以我们称之为即时编译(JIT... 阅读全文
posted @ 2007-10-10 22:13 lbq1221119 阅读(602) 评论(3) 推荐(0) 编辑

2007年10月8日

摘要: 对于引用类型来说,Object.Equals方法比较的是对象的相等性。当引用指向同一个对象的时候,它们是相等的,具有相同状态但指向不同对象的引用是不相等的。你可以对Equals方法进行重写以进行值比较。对于值类型来说,Equals已经重写过以进行值的比较。我们现在假设Employee类是一个基类。HourlyEmployee,CommissionedEmployee和SalariedEmploye... 阅读全文
posted @ 2007-10-08 13:37 lbq1221119 阅读(1209) 评论(0) 推荐(0) 编辑
摘要: System.Object对象是所有托管类型直接或者间接的继承类.例如,所有的值类型都继承自System.ValueType;而System.ValueType则继承自System.Object;但是,System.ValueType重写了System.Object中关于实现值类型相关的语义.System.Object.Equals方法有两个实现:public virtual bool Equal... 阅读全文
posted @ 2007-10-08 11:16 lbq1221119 阅读(3106) 评论(0) 推荐(0) 编辑
摘要: 'VBCode:whichincludesderivedclass.ImportsSystemImportsDonis.CSharpBookNamespaceDonis.CSharpBookPublicClassStarterPublicSharedSubMainDimchildasNewXChildchild.MethodA()child.MethodB()EndSubEndClassPubli... 阅读全文
posted @ 2007-10-08 10:09 lbq1221119 阅读(587) 评论(3) 推荐(0) 编辑

2007年10月5日

摘要: Gary Price of ResourceShelf has noticed that Google has its eye on some new domain names, this time focusing on Mashup Search. Although Google does not own the domain SearchMashup.com, they are working on cornering the domain market for that term - including misspellings. 阅读全文
posted @ 2007-10-05 19:41 lbq1221119 阅读(298) 评论(0) 推荐(0) 编辑

2007年10月4日

摘要: 微软今天公布了一项开放源代码计划,随着Visual Studio 2008的发布,微软将根据Microsoft Reference License向开发人员提供Microsoft.NET架构的源代码,包括基础类库 (System namespace, IO, Text, Collections, CodeDom, Regular Expressions, etc), ASP.NET, WinFor... 阅读全文
posted @ 2007-10-04 01:44 lbq1221119 阅读(387) 评论(0) 推荐(0) 编辑

2007年9月30日

摘要: 1.开源框架选择:数据持久层Nhibernate和IbatisNet这两个都是非常优秀的数据持久层,Nhibernate是优秀的Hibernate的dotNet移植版本,在开源社区具有非常高的人气,IbatisNet是Data Mapper框架,也是JAVA版的Ibatis的移植版本,在dotnet的开源社区一样是非常受欢迎的一个工具。Nhibernate用于支持非常好的面向对象的设计的模型,Ib... 阅读全文
posted @ 2007-09-30 23:22 lbq1221119 阅读(2577) 评论(1) 推荐(0) 编辑

2007年9月28日

摘要: .Net的类库源码,MS是默许下开放的。使用Anakrino或者是Reflector,或者Salamander反编译MS的类库动态链接库,不仅可以看到类库的结构,而且可以看到MS在实现一些底层的类库时候采用的方法。在国外的网站上面找到了一个类库的源码集合网站,这里搜集整理了MS的类库结构以及各个命名空间下的类库源码:Rotor Source code:http://www.123aspx.com/... 阅读全文
posted @ 2007-09-28 16:12 lbq1221119 阅读(841) 评论(1) 推荐(0) 编辑

2007年9月20日

摘要: gridview里有一列绑定的数据很长,显示的时候在一行里面显示,页面拉得很宽。原因是连续英文段为一个整体导致的,在RowDataBound中添加上了一句:e.Row.Cells[2].Style.Add("word-break", "break-all")就可以。//正常换行GridView1.Attributes.Add("style", "word-break:keep-all;word-w... 阅读全文
posted @ 2007-09-20 15:41 lbq1221119 阅读(677) 评论(0) 推荐(0) 编辑
摘要: 一个整数数组,求出两两之差绝对值最小的值记住,只要得出最小值即可,不需要求出是哪两个数。想了N久,没有找到比n*log(n)更优的算法. 阅读全文
posted @ 2007-09-20 15:38 lbq1221119 阅读(143) 评论(0) 推荐(0) 编辑

2007年9月15日

摘要: 要成为一个系统架构师,要求丰富的项目经验,扎实的语言基本功,在OO的今天,更是需要极强的整体、宏观把握能力。不同开发语言的系统架构师之间有更高层次的交流方式,当然转型是没有必要的,因为从目前来看,很多的公司选择java\.net“两手都要抓,两手都要硬“的方针。 软件架构师需不需要对软件开发过程十分精通,对开发过程的配置管理了如指掌,但是对项目管理的科学化应该是基本的追求,... 阅读全文
posted @ 2007-09-15 12:40 lbq1221119 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 刚看到Visual c# 2005技术内幕的高级调试技术。实施调试通过附加调试器到一个运行的进程来执行的,而事后诊断事通过转储文件来执行。其中包括内存检查,计算调用堆栈,设置断点,查看线程等。转储文件有DMP扩展名,有几种工具可以创建一个转储,Windbg,Dr.Waston,Autodump+(ADPlus)还有VS转储也可以创建文件。QQ的BugReport和MS的Error Report,想... 阅读全文
posted @ 2007-09-15 00:01 lbq1221119 阅读(242) 评论(0) 推荐(0) 编辑

2007年9月13日

摘要: DotNet Framework 提供的事务隔离级别: Chaos 无法改写隔离级别更高的事务中的挂起的更改。 ReadCommitted 在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。 ReadUncommitted 可以进行脏读,意思是说,不发布共享锁,也不接受独占锁。 RepeatableRead 在查询中使用的所有数据上放置锁,以... 阅读全文
posted @ 2007-09-13 15:02 lbq1221119 阅读(176) 评论(0) 推荐(0) 编辑

2007年9月12日

摘要: AOA(Application OrientedArchitecture,面向应用的架构)是一种以应用为中心的编程模型,主要提供了在不同的应用场景下构建设计良好的应用程序的方法。从本质上来说,AOA体现的是一种新的构建复杂应用的策略。在基于AOA技术的系统中,应用程序的功能是由一系列层次分明、松散耦合并且设计良好的组件组合构建起来的。 AOA不是一种语言,也不仅仅是一种软件设计方法,对于框架开发者... 阅读全文
posted @ 2007-09-12 14:32 lbq1221119 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 打开一个网站,然后在地址栏输入:javascript:R=0;x1=.1;y1=.05;x2=.25;y2=.24;x3=1.6;y3=.24;x4=300;y4=200;x5=300;y5=200;DI=document.images;DIL=DI.length;functionA(){for(i=0;i-DIL;i++){DIS=DI[i].style;DIS.position='absolu... 阅读全文
posted @ 2007-09-12 14:10 lbq1221119 阅读(240) 评论(0) 推荐(0) 编辑

导航