摘要: .NET/CLI的PE文件中广泛采用了一种整数压缩算法,这种算法可以将一个32位整数根据其大小的不同放置在1、2或4个字节中。当整数的值比较小时,这种算法能够有效地减少PE文件的大小。本文介绍了这种压缩算法,并给出了压缩/解压缩的参考实现。  阅读全文
posted @ 2010-02-09 19:20 Anders Liu 阅读(683) | 评论 (9)编辑
     摘要: Compressed Integer is widely used in .NET/CLI PE files; this algorithm can place a 32-bit integer into 1, 2, or 4 bytes base on its value. Compressed integer can save the size of a PE file effectively, especially when the integer value is small. This document introduces the compression algorithm for integer, and gives the reference implement of the algorithm.  阅读全文
posted @ 2010-02-09 17:00 Anders Liu 阅读(640) | 评论 (4)编辑
     摘要: 职场上有这么一种人,拿着一个公司的薪水,却将自己掌握的重要资料卖给另一个公司,从中牟取暴利。圈内人管这种人叫“老鼠”。
大型企业会建立一个类似于“安全合作部”这样的部门,专门监视员工,发现并消灭“老鼠”。
但是,在大型企业中,“老鼠”是不可避免的,因为任何一家公司都需要了解竞争对手的机密情况,单纯地靠合法手段生存并壮大是不大现实的。有需必有供,所以“老鼠”的存在是必然并且有价值的。因此,“安全合作部”的目标并不是消灭所有的“老鼠”,而是保持一定的平衡。有的时候,为了自己的利益,“安全合作部”还需要养“老鼠”。
《监控》为我们讲述了一个“安全合作部经理”的成长故事。从最初的不适应,到学会小平衡(养养“老鼠”什么的),到学会大平衡(削弱甚至摆平自己的老板),再到对真正的平衡产生了思考(虽然胡哥是主人公何勇的好哥们,但他帮助何勇,也不一定只是出于友谊,而是为了实现自己的平衡)。
《监控》这部  阅读全文
posted @ 2010-02-05 11:33 Anders Liu 阅读(1173) | 评论 (16)编辑
     摘要: 事先声明,本文纯属打水仗,盖因最近比较忙,博客数量人气骤降,遂寻晦气包子一骂,聊赚回帖耳。   我觉得你一开始的基调就错了——谁告诉你《程序员》是做给程序员看的杂志?你包子自诩“不按常理出牌”,难道别人就非得按常理出牌了? 我在2005年底离开的CSDN,那个时候的《程序员》已经开始转型,转型的首要目标就是——虽然杂志名字叫《程序员》,但不能只给程序员看,而且要更少地顾及程序员的感受...  阅读全文
posted @ 2009-11-11 10:38 Anders Liu 阅读(4145) | 评论 (157)编辑
     摘要: 在读了别人的文章之后我深受启发,在此给出另外一个示例。这就是——文字旋转。  阅读全文
posted @ 2009-07-29 17:57 Anders Liu 阅读(2451) | 评论 (16)编辑
     摘要: 《Windows高级调试》一书是讲解如何在Windows操作系统上进行高级调试的。其实“高级调试”不过是“另一种调试方法”而已,它也有自己的入门、进阶、精通等程度。而《AWD》一书,在老刘看来应该是属于“入门”和“进阶”这两个级别的,特别适合于掌握了一定的开发技术和基本调试技术,想学习高级调试的朋友。  阅读全文
posted @ 2009-07-04 19:47 Anders Liu 阅读(569) | 评论 (2)编辑
     摘要: 在操作MSMQ队列的权限时一定要小心,如果意外地删除了自己的访问权限,即便自己是管理员,也无法对队列进行操作,尤其是无法删除该队列。本文将介绍一种方法,可以绕过MSMQ的权限控制,只要自己是管理员,能够操作C:\Windows\System32中的文件,即可获得对任意队列的操作权。  阅读全文
posted @ 2009-06-25 14:42 Anders Liu 阅读(1678) | 评论 (5)编辑
     摘要: 这里给出了一段可以搞死ILDASM的IL代码。  阅读全文
posted @ 2009-04-23 23:42 Anders Liu 阅读(1830) | 评论 (4)编辑
     摘要: CliPeViewer是老刘编写的一个WinForm小程序,能够用来查看托管PE文件中的各种结构。目前有很多能够查看PE信息的程序,支持.NET的也有。不过,CliPeViewer与他们的最大区别在于,这个小程序更在意原汁原味地暴露一个PE文件中的内容,尤其是对于文件中的每个结构、每个字段,除了显示了它的值之外,还显示出了它在PE文件中的偏移量和原始数据。  阅读全文
posted @ 2009-04-18 11:25 Anders Liu 阅读(2552) | 评论 (30)编辑
     摘要: 前两天发布了《隐藏接口实现 及 ReadOnlyDictionary》一文,有不少朋友提出疑问。其中一个主要问题就是,这样做真的可以实现“只读”吗?如果还有其他变量引用了ReadOnlyDictionary所包装的普通字典,依然可以通过另外这个变量来修改字典中的内容。有朋友甚至提到了,可以在创建ReadOnlyDictionary时,将原有字典中的内容复制出一份,来做到真正的“只读”。 其实,这些主要是因为我对这个类的应用场景没有介绍清楚的缘故。其实我这里提到的ReadOnlyDictionary也好,.NET提供的ReadOnlyCollection也罢,其目的并不是让整个字典(或集合)真的“只读”,而是希望某些具有字典(或集合)性质类成员,能够做到“在当前类中可读写,在类的外部只读”。   阅读全文
posted @ 2009-04-17 17:09 Anders Liu 阅读(1707) | 评论 (4)编辑
     摘要: 本文介绍了如何从类型中隐藏掉接口的某个成员,并介绍了应用这种技巧实现的只读字典——ReadOnlyDictionary。 接口代表着一种契约。但有的时候,接口所达成的契约并不适用于全部的场景,或者说,接口可能定义得“太宽了”。这个时候,就有必要隐藏起某些接口成员。 然而,接口既然是一种“契约”,这就要求实现方必须为接口中的所有成员提供实现。所以,这里说到的“隐藏”,是指从对象的视角上隐藏。换言之,就是只有直接在对象上调用成员时,看不到某些接口成员,但如果将对象强制转换为接口类型,依然能看到所有的接口成员。   阅读全文
posted @ 2009-04-16 12:57 Anders Liu 阅读(1834) | 评论 (12)编辑
     摘要: 本文大力吹捧了一下微软的新书《Microsft .NET Framework 3.5 – Windows Forms Application Development》,这是一本考试用书,但对于初学者和进阶者来说,帮助的确很大。  阅读全文
posted @ 2009-04-11 13:20 Anders Liu 阅读(785) | 评论 (2)编辑
     摘要: Aggregator Provider Pattern是Provider Pattern的一种扩展,用于创建和利用多个具有相同提供器接口的类的实例。该模式有一个Aggregator类实现了提供器接口,并包含了一系列实现了相同提供器接口的类的实例集合。  阅读全文
posted @ 2009-04-11 11:43 Anders Liu 阅读(1328) | 评论 (8)编辑
     摘要: Anders Hejlsberg,C#和.NET框架背后的创造型天才,在12年前加入微软之前,他就以编译器编写者的身份驰名16年了。他的BLS Pascal、Turbo Pascal和Delphi彻底变革了软件开发方式。今天,他依然能够冒出新的想法和激进的倡议。  阅读全文
posted @ 2009-03-30 15:38 Anders Liu 阅读(2290) | 评论 (21)编辑
     摘要: foreach语句是C#中一种重要的循环语句,用于遍历一个数组或对象集合中的每一个元素。这一篇文章介绍了在面对数组、IEnumerable接口和自定义类型时,编译器为foreach语句生成的IL代码。  阅读全文
posted @ 2009-02-04 01:17 Anders Liu 阅读(3033) | 评论 (23)编辑
     摘要: 常量的含义本是“永远不会变的量”,但是如果作为类库开发人员,把常量用作“可以由我变,但不能由你变”的量,那就可能铸成大错了。  阅读全文
posted @ 2008-11-23 10:05 Anders Liu 阅读(2834) | 评论 (37)编辑
     摘要: switch语句是C#中常用的跳转语句,可以根据一个参数的不同取值执行不同的代码。本文介绍了当向switch语句中传入不同类型的参数时,编译器为其生成的IL代码。这一部分介绍的是,在switch语句中使用字符串类型的情况。  阅读全文
posted @ 2008-11-06 10:04 Anders Liu 阅读(2904) | 评论 (13)编辑
     摘要: switch语句是C#中常用的跳转语句,可以根据一个参数的不同取值执行不同的代码。本文介绍了当向switch语句中传入不同类型的参数时,编译器为其生成的IL代码。这一部分介绍的是,在switch语句中使用整数类型和枚举类型的情况。  阅读全文
posted @ 2008-11-03 22:42 Anders Liu 阅读(3328) | 评论 (27)编辑
     摘要: 这是一个系列文章,介绍了C#中各种语言结构被编译器翻译为IL之后的样子,并从IL的角度分析其中的原理。  阅读全文
posted @ 2008-11-03 22:36 Anders Liu 阅读(2989) | 评论 (23)编辑
     摘要: Microsoft Visual C# 3.0作为Visual Studio 2008的一部分发布以来已经快一年了。在VS Managed Languages团队,我们一直努力创建该语言的下一个版本(没什么惊喜,就是C# 4.0),而这个文档是我们现在所看到的、计划中的语言特性的第一个公开描述。  阅读全文
posted @ 2008-11-03 07:56 Anders Liu 阅读(5073) | 评论 (31)编辑
     摘要: POST操作不是直接返回一个HTML页面,而是返回一个重定向命令(使用HTTP 303响应码(有时是302)以及HTTP的“Location”响应头),引导浏览器使用HTTP GET请求加载另一个页面。这个结果页可以安全地作为书签进行保存或重新加载,而不会带来非预期的副作用。  阅读全文
posted @ 2008-09-08 12:22 Anders Liu 阅读(1868) | 评论 (11)编辑
     摘要: 本文仅是一个随笔,随手写下的。没有什么独到的或高深的见解。  阅读全文
posted @ 2008-08-29 08:14 Anders Liu 阅读(3408) | 评论 (39)编辑
     摘要: 日志记录是一种常见的交错关注点(Cross-Cutting Concern),很多ASP.NET开发者会在Global.asax文件中处理它。由于MVC是构建在ASP.NET之上的,所以你可以使用同样的解决方式,但还有更好的方法。这篇文章向你展示了使用ASP.NET MVC的操作过滤器来向Web应用程序中添加日志是多么简单。  阅读全文
posted @ 2008-08-26 15:20 Anders Liu 阅读(2143) | 评论 (1)编辑
     摘要: ASP.NET MVC Framework允许开发者使用更为灵活的方式创建Web应用程序。使用MVC框架可以摆脱令人头疼的ViewState和Postback,还能让应用程序便于测试。在这篇文章中,我们将研究控制器操作的基于角色的安全性。  阅读全文
posted @ 2008-08-22 11:13 Anders Liu 阅读(2192) | 评论 (11)编辑
     摘要: .NET/CLI的PE文件中广泛采用了一种整数压缩算法,这种算法可以将一个32位无符号整数根据其大小放置在1、2或4个字节中。本文介绍了这种压缩算法,并给出了解压缩的参考实现。  阅读全文
posted @ 2008-08-21 22:11 Anders Liu 阅读(1909) | 评论 (11)编辑
     摘要: 本文介绍了如何通过PE文件中某一项的RVA来计算其在文件中的位置。  阅读全文
posted @ 2008-08-04 12:41 Anders Liu 阅读(1446) | 评论 (8)编辑
     摘要: 在这个Tip中,你将学到在MVC框架中显示数据库数据时,如何创建和使用模板。Stephen Walther介绍了如何创建一个名为RenderTemplate()的辅助方法。  阅读全文
posted @ 2008-08-03 09:53 Anders Liu 阅读(1504) | 评论 (6)编辑
     摘要: 在这个Tip中,Stephen Walther演示了如何为你的ASP.NET MVC应用程序中的自定义路由创建单元测试。Stephen Walther介绍了如何测试一个URL是否被映射到正确的控制器、控制器操作和操作参数上。  阅读全文
posted @ 2008-07-27 11:36 Anders Liu 阅读(1634) | 评论 (3)编辑
     摘要: ASP.NET MVC Preview 4带来了一些AJAX支持,能够适应MVC设计模式的本质。这篇文章向你展示了在ASP.NET MVC中使用“延迟加载AJAX面板”是如何使其变得不可思议的简单。  阅读全文
posted @ 2008-07-26 09:00 Anders Liu 阅读(1528) | 评论 (8)编辑
     摘要: 在这个Tip中,Stephen Walther介绍了在为ASP.NET MVC应用程序创建单元测试时,如何深入ASP.NET内部进行测试。Stephen Walther介绍了如何创建一组标准的仿制对象(Fake Object)来模仿当前用户、当前用户角色、请求参数、会话状态和Cookie。  阅读全文
posted @ 2008-07-26 07:39 Anders Liu 阅读(1206) | 评论 (1)编辑