SSCLI下的可执行文件格式分析(2)

下面,我们就开始分析激动人心的MetaData了。
首先,是在IMAGE_COR20_HEADER中根据名为MetaData的IMAGE_DATA_DIRECTORY项查找MetaData表的位置,计算方法跟上文提到的找COM Headerä½ç½®ç …

more ...

SSCLI下的可执行文件格式分析(1)

SSCLI下的可执行文件格式分析(Draft)

记得MSDN上某篇介绍Windows PE文件格式的超级经典权威文章开篇说道“一个操作系统的可执行文件格式在很多方面是这个系统的一面镜子。虽然学习一个可执行文件格式通常不是一个程序员的首要任务,但是你可以从这其中学到大量的知识。”最近在研究SSCLI的源代码,有些无从下手,抱着“柿子先拣软的捏”的想法,想先从.NET平台下的可执行文件入手,然后可以更进一步到Class Loader,到内存中的Object Layout,到美国人开玩笑说的JIT Happens,到Garbage Collection……
参考的东西有Google,Shared Sourced CLI Essential,Inside Microsoft.NET IL Assembler,SSCLI Source Code……
使用的工具是用来调试代码的Windbg,用来查看代码交叉链接的Source Insight,用来看二进制的UltraEdit,用来进制转换和算加减法的Windows自带计算器,用来临时记录东西的Notepad,用来字数统计和打字的Word,用来编写测试代码的Visual Studio.net 2003,用来喝水的杯子……

首先写个简单的C#程序,Hello …

more ...

建立SSCLI运行和调试环境

从微软网站上(http://msdn.microsoft.com/net/sscli)下载回来的SSCLI是一个15M的压缩包。本文介绍如编译,运行,调试SSCLI和如何察看它的代码。下文所述都是笔者使用的运行环境和方法。有可能有更好的方法,欢迎交流,我的电子邮件:xxx@msn.com。

SSCLI是一个可以跨平台的实现,可以运行在Winodws,FreeBSD和Mac OS上,据说有些高手已经成功的把SSCLI跑在了Linux上。但是后面几个环境笔者不熟悉,所以Windows就成了不二之选。

安装必备的软件:

操作系统: Microsoft Windows XP

其它软件: Visual Studio.NET 2003专业版 (用来编译SSCLI,至少安装VC++.NET)

               Active Perl(Perl的引擎,用来编译SSCLI)

               Source Insight       (不错的源代码查看工具,可以方便的在代码之间进行符号跳转。用来查看SSCIL源代码)

               Windbg(微软的调试工具,用来调试SSCLI的运行情况 …
more ...

Shared Source CLI——窥探.NET底层机制的钥匙

编者按:Microsoft于2002年2月发布了Visual Studio.NET,揭开了.NET时代的序幕。几乎是与此同时,2002年3月27日,微软发布了Shared Sourced Common Language Infrastructure(共享源代码的通用语言基础设施,以下简称SSCLI)。两年过去了,国外已经有不少的大学和机构在研究SSCLI,也做出了一些比较不错的项目。但是反观国内,关于SSCLI的讨论和研究却乏善可陈。本文简单的介绍一下SSCLI的内容,希望能引起广大.NET爱好者的兴趣。

什么是SSCLI

2000年8月,微软,HP和Intel共同向国际标准化组织ECMA(欧洲计算机制造商协会)提交了通用语言基础设施(CLI)和C#编程语言的规范,希望能借此使CLI和C#成为国际标准。2001年12月13日,ECMA会员大会批准C#和通用语言基础设施(CLI)规范成为国际标准。在ECMA标准中,它们的名字是ECMA-334(C#)和ECMA-335(CLI)。SSCLI就是ECMA-334和ECMA-335的实现。SSCLI是非商业化且共享源代码的软件,它可以在FreeBSD, Mac OS X和Windows上编译运行 …

more ...

瓶颈==基础知识

前几天跟同学其去了一趟电脑图书市场。打算弄几本“砖头”来啃啃。却发现自己慢慢的慢慢的落入了这样一种境地。
以前――确切的说是刚刚转入软件学院――逛计算机图书市场,总是觉得有很多书可以看,鉴于手中的Money,不得不舍鱼而取熊掌。《xx技术内幕》《深入浅出xxx》《xx编程思想》《xx本质论》《xx Primer》都是非常值得一读的图书。但是现在两年过去了,或许是浮躁了,或许真的是学到了一点东西。渐渐的,觉得编程类的图书已经不太能够吸引我的兴趣了。虽然当时因为囊中羞涩而没有买《C++ Programming Language》,但是现在已经没有兴趣再去买它了。其它的,例如《C#技术内幕》《ADO.net Internal》等等,已经都不太有兴趣去看了。理由呢,其一:.net的原理已经摸了个大概,ado.net的数据访问模式也基本了解了,真的要用的时候,可以快速的查找资料而获得答案。或许同学跟我也有一样的感触。有个同学说“《深入浅出MFC》这种书是给比较初级的程序员看的……”
那么除了编程类书籍。还能看些什么呢 …

more ...

软件领域的学习路线

今天,虽然是平安夜。但是周围没有一点节日的气氛。一个下午在软件学院看新来的开发板,晚上老师们去酒店聚餐了,却让我留在这离上海三十公里的地方坚守岗位,整个校区都空荡荡的,好冷……
晚上,有个上进的小弟弟给我发邮件,反正也没事,就长篇大论一下了,骗完了人还把邮件贴到这里,在起一个吓人的名字,当一篇blog…

ASK:

我开门见山了

我一直想本科阶段学mfc ATL STL C# 再看Java VB ASP就行了

但今天看来想法天真

我想这远远不够,远远不够完整

我想使我的学习的体系能够足够的大足够的深,至少是在本科阶段是这样的

不然就算考上研究生也没后劲,到时候死都不知道是怎么死的,死无葬身之地

然而我不想死,想活着,好好的活着,更想让别人看着我而寻死,哈哈

我需要一个构架,完整一点的,够大沟深(有点像棺材),

到时候就算自己活不成,也能有个棺材,比死无葬身之地要好!

不怕你笑话,这里的老师水平有限(我找了8个),没人能给我一个完整一点的知识框架

谈到编程方面,我告诉他我的计划 …

more ...

撞上了“程序员成长最危险的时刻”

今天在别人的blog上看到一篇文章,说程序员最危险的时刻,是这么说的:

其实程序员成长最危险的时刻不是在你什么都不懂的时候,而是在你懂了一些的时候。开始的时候,你觉得什么都不懂,于是你天天看书,通宵编程。后来你懂了c了,算法数据结构操作系统在学校也学了,用VC 写程序时你边看MSDN边用MFC,觉得感觉还不错;你用Delphi甚至做了一个个像模像样数据库的项目了。至于COM,你懂了一点点,说起来头头是到,虽然没用过。标准C++嘛,你在大学学过基本的C++,工作时用VC,什么继承,虚函数,const,引用,模板你也都用过了。你也听说过设计模式,用过最简单的单件模式什么的,虽然还有很多你不懂的。有的时候你觉得操作系统很有意思,你还写过些多线程的控制系统的东西。可是现在你反倒觉得你什么都不会了,看这别人用VC 写的大系统,你觉得很写的很好,可是你不知道怎样达到那样的水平。你觉得你有很多的东西都不懂,可是你不知道怎么学得更好,有的时候你对编程序都快没激情了,于是你也跟我一样到了程序员成长最危险的时刻。有些朋友觉得已经可以混到饭吃了,就不再努力,这样就危险了!

不看则已,一看吓了一身冷汗,似乎每条说的都是我……作为一个半路出家上了“挨踢 …

more ...

我的2004年

今天看到12月的《程序员》杂志。年底了,请了蔡学镛等好多业界名人谈论自己的2004年。是啊,年底了,也该总结一下了。

2004年是我跨入软件领域的第三个年头,总体来说,我的2004年还是充满变数与激情的。在技术上,人生上和很多问题的看法上或许即将过去的一年都是一个转折点。

1月:我继续在微软全球技术支持中心实习。工作趋于稳定,主要在负责中国的新闻组。

2月:2月20日,我结束了在微软八个月的实习,重新回到学校实习。2月23日,我就收到了周文钧老师的邮件,然后就当上了C++的助教。

3月:看着周围的同学慢慢的找工作。对着我自己来说,助教占据了我日常生活的大多数时间,回答问题,看学生的作业,这段时间认识了不少03的同学。3月中旬给03的同学做过一次Presentation,讲了些C++和微软的技术。这个月里,有一个人在我不知不觉中,慢慢地的走入了我的生活。

4月:4月5号是个难忘的日子。自从那天起,发觉我的人生,与以前相比,真的变了。思想上,经历了一个或许能影响一生的抉择。技术上,也是从那天开始,我第一次接触到了Windows CE …

more ...

回答学弟的问题

Q:

你好!~

现在我已经能够比较好的适应MFC的程序了,一般的程序都可以慢慢看懂,谢谢你的指导!

但是接下来如何进一步提高自己的水平?是做一些比较综合的项目,还是看一些高级一点的东西?

下一步怎么走,应看哪一些书?

C#老师说,C#将取代C++成为开发应用软件最广泛的语言!这我相信。但请问Mircosoft把C++语言放在怎样的一个位置?以后的Longhorn还会继续用C编写吗?

A:

第一个问题,我觉得你还是写一个有一定代码量的程序。例如,模仿一个Excel。或者模仿一个QQ,或者模仿一个扫雷或者画图板,做一两个项目以后,我会告诉你看什么高级书的。

第二个问题,不用这么着急关心C++的前途。C++不会灭亡,任何语言都有它背后的思想。这种东西会潜移默化的影响你。没有C++就不会有C#,C#有好的地方,也有不好的地方。学习的多了,自己就会有体会。

more ...

为同济基础软件中心同学编写的学习计划

昨天终于基础软件中心开了第一次碰头会,老师让我坐汽车电子方面的小头目。虽然不是很情愿,但是也得做啊。第一件事,要把同学的一些要用到的知识补充一下。经过昨天晚上到12点多的努力,终于把学习计划弄了个差不多。不要浪费了,Post到这里来。

学习计划(Draft)

何宗键

2004年10月21日

一、编程语言

1.1 C / C++语言基础

熟练的掌握一两门编程语言是对软件工程师的基本要求。C / C++已经被广泛的运用于系统编程和应用编程。因此,我们建议大家能够熟练的掌握C / C++语言的基本语法。在工作的时候不被小的细节困惑。

1.2 面向对象,多态,泛型

C++仅仅是一门工具,隐藏在C++背后的含义,也就是它所表现出来的思想,是面向对象(Object-Oriented)与泛型(Generic Programming)。因此在掌握这门工具的同时,希望大家能体会一下OO,Polymorphism与GP的涵义。

此外,学习语言不能仅仅停留在书本 …

more ...