5
结构软件学且思——以 STAAD 为例 QQ 群:30787198 敲门请写“玩结构的” 1 1 管窥各种软件的文件组成......................................................................................................................... 1 1.1 DLL 和 exe 都是什么文件................................................................................................................ 1 1.2 软件整容软件..................................................................................................................................2 1.3 软件 DNA 鉴定利器——Dependency WalkerViewAPI............................................................ 4 1 管窥各种软件的文件组成 绝大多数准司机在顺利通过驾驶执照的考试后就欢天喜地开着一堆铁和工程塑料的组合体上 路了,在他们眼里,喇叭、方向盘、油门、刹车和仪表盘基本上代表了汽车的全部,一旦汽车出了 故障,交到 4S 店处理完事。 这个世界上,还会有一小部分司机在学会开车后,还想了解车盖下面、底盘下的那些铁器是如 何工作的,如果您是这样的人,请继续向下看,如果您是前者,请跳过本章。 绝大多数结构工程师在大学里都修过编程的课,甚至在初中高中就已经接触软件编程了。但是 绝大多数学校给土木系的学生开的计算机编程的课是以古老的 FORTRAN 为例来讲授的。众所周知搞图形界面这活儿并不是 FORTRAN 的特长甚至可以说是其软肋,而上世纪 90 年代随着微软的 WINDOWS 平台大行其道,没有绚丽的图形界面的软件已经不好意思出来见人了。 当年学了 FORTRAN 编程的工程师看到界面五彩缤纷的结构软件后,总觉得自己白学了——明 明在大学里拿到了学分甚至考了高分,可是真要想编出一个哪怕是求工字形截面的惯性矩这种仅需 要一个对话框的小程序来,还是感觉无从下手,所以觉得能编写这些软件的“码农”有一种神秘感。 本章就为您在窗户纸上戳个小窟窿,对我们常用的软件做个入门级的剖析。 1.1 1.1 1.1 1.1 DLL 和 exe exe exe exe 都是什么文件 打开任何一个基于 Windows 平台的软件的安装目录,映入眼帘的是一堆堆后缀是 dll、exe 的 文件,可能还有少量的 ocx 或者 arx 为后缀的文件。这些文件都是所谓的 PE(Portable Executable格式的文件。 3_1 Dave Cutler 话说 PE 这种格式,得归功于微软公司在 1989 年前后聘请的来自 DEC 公司的外援,特别是其中有位叫做 Dave Cutler 的。 PE 格式是由 Unix 中的 COFF 格式修改而来的。1993 年,Windows NT 3.1 问世,PE 格式首次作为操作系统的可执行文件格式。PE 格式 也在不断升级,目前最新版本是 2010 年 9 月发布的 8.2 版本。 设计这种格式的初衷是定义一种在所有 Windows 平台上和所有 CPU 上都可执行的通用文件格式。单词“Portable”体现了这个意图。 从 Windows 这些年的各种版本来看,应该说 PE 格式达到了当初 的设计初衷。 Linux 和大多数 Unix 版本中的格式是“可执行与可链接格式 ELF(Executable And Linkable)(同样也是 COFF(Common file format)格式的变种),而苹果操作系统的格式是 Mach-O。 有兴趣对 PE 格式进行深入研究的读者,不妨去读读文献 i 。不过笔者不推荐结构工程师在这方 面花很多时间。 DLL(Dynamic Link Library 即“动态链接库”的缩写)文件里都有些啥信息呢?对于软件的 使用者(非程序员)而言,我们都能从这些文件里挖掘出什么信息呢?如何挖掘呢?请看下节。 http://en.wikipedia.org/wiki/Import_Address_Table http://en.wikipedia.org/wiki/Portable_Executable

管窥软件的文件组成

  • Upload
    ponjove

  • View
    223

  • Download
    1

Embed Size (px)

DESCRIPTION

gt strudl article

Citation preview

Page 1: 管窥软件的文件组成

结构软件学且思——以 STAAD为例QQ 群:30787198 敲门请写“玩结构的”

1

1 管窥各种软件的文件组成.........................................................................................................................11.1 DLL 和 exe都是什么文件................................................................................................................ 11.2 软件整容软件..................................................................................................................................21.3 软件 DNA鉴定利器——Dependency Walker、ViewAPI............................................................ 4

1111 管窥各种软件的文件组成绝大多数准司机在顺利通过驾驶执照的考试后就欢天喜地开着一堆铁和工程塑料的组合体上

路了,在他们眼里,喇叭、方向盘、油门、刹车和仪表盘基本上代表了汽车的全部,一旦汽车出了

故障,交到 4S 店处理完事。

这个世界上,还会有一小部分司机在学会开车后,还想了解车盖下面、底盘下的那些铁器是如

何工作的,如果您是这样的人,请继续向下看,如果您是前者,请跳过本章。

绝大多数结构工程师在大学里都修过编程的课,甚至在初中高中就已经接触软件编程了。但是

绝大多数学校给土木系的学生开的计算机编程的课是以古老的FORTRAN为例来讲授的。众所周知,

搞图形界面这活儿并不是 FORTRAN 的特长甚至可以说是其软肋,而上世纪 90 年代随着微软的

WINDOWS平台大行其道,没有绚丽的图形界面的软件已经不好意思出来见人了。

当年学了 FORTRAN编程的工程师看到界面五彩缤纷的结构软件后,总觉得自己白学了——明

明在大学里拿到了学分甚至考了高分,可是真要想编出一个哪怕是求工字形截面的惯性矩这种仅需

要一个对话框的小程序来,还是感觉无从下手,所以觉得能编写这些软件的“码农”有一种神秘感。

本章就为您在窗户纸上戳个小窟窿,对我们常用的软件做个入门级的剖析。

1.11.11.11.1 DLL 和 exeexeexeexe都是什么文件

打开任何一个基于 Windows 平台的软件的安装目录,映入眼帘的是一堆堆后缀是 dll、exe 的

文件,可能还有少量的 ocx或者 arx为后缀的文件。这些文件都是所谓的 PE(Portable Executable)

格式的文件。

图 3_1 Dave Cutler

话说 PE 这种格式,得归功于微软公司在 1989 年前后聘请的来自

DEC 公司的外援,特别是其中有位叫做 Dave Cutler 的。

PE格式是由 Unix中的 COFF 格式修改而来的。1993 年,Windows

NT 3.1 问世,PE 格式首次作为操作系统的可执行文件格式。PE 格式

也在不断升级,目前最新版本是 2010年 9 月发布的 8.2 版本。

设计这种格式的初衷是定义一种在所有 Windows 平台上和所有

CPU 上都可执行的通用文件格式。单词“Portable”体现了这个意图。

从 Windows 这些年的各种版本来看,应该说 PE 格式达到了当初

的设计初衷。

Linux和大多数 Unix 版本中的格式是“可执行与可链接格式 ELF(Executable And Linkable)”

(同样也是 COFF(Common file format)格式的变种),而苹果操作系统的格式是 Mach-O。

有兴趣对 PE格式进行深入研究的读者,不妨去读读文献i。不过笔者不推荐结构工程师在这方

面花很多时间。

DLL(Dynamic Link Library 即“动态链接库”的缩写)文件里都有些啥信息呢?对于软件的

使用者(非程序员)而言,我们都能从这些文件里挖掘出什么信息呢?如何挖掘呢?请看下节。

http://en.wikipedia.org/wiki/Import_Address_Tablehttp://en.wikipedia.org/wiki/Portable_Executable

Page 2: 管窥软件的文件组成

结构软件学且思——以 STAAD为例QQ 群:30787198 敲门请写“玩结构的”

2

1.21.21.21.2 软件整容软件

软件也能被整容?当然,不需要懂编程也可以给软件整容的,就像不懂电路原理的人可以把电

视机外表装饰得漂亮一点一样。

软件的对话框、示意图等信息一般存储在一些 dll 或者 exe文件中,有很多软件可以把这些 dll或 exe文件中的那些对话框、示意图等暴露出来,比如由 Angus Johnson 开发的“Resource Hacker”

这个免费软件(http://www.angusj.com/resourcehacker)、或者 Colin Wilson 开发的软件“XN

Resource Editor”(http://www.wilsonc.demon.co.uk/d10resourceeditor.htm,开放源代码的)或者 AndersMelander 开发的免费软件“Resource Editor” (http://melander.dk/reseditor )我们可以利用这些软

件来给我们所用的软件来整整容。

也许您想到了,所谓的软件汉化,是不是也算是一种整容呢?没错,就是利用上述这些软件来

把一些软件界面上的洋文改成中文。汉化软件常用的工具软件还有 eXeScope以及 ResScope等。

STAAD里的大部分对话框都可以在D:\SProV8i\STAAD\Language\Chinese\USEnglish_chs.dll这个

文件里找到。图 3_2是 STAAD里设置标注的对话框。

图 3_2 设置标注的对话框

Page 3: 管窥软件的文件组成

结构软件学且思——以 STAAD为例QQ 群:30787198 敲门请写“玩结构的”

3

图 3_3 “整容”后的对话框

如果您觉得某些字句翻译的不够准确,您

完全可以在下图相应位置修改那些字句(比如将

“终端颜色”改为“末端颜色”),然后点击

“Compile Script”按钮,保存后退出“ResourceHacker”,重新打开 STAAD 的某个模型文件,

并点击图标 ,在弹出的对话框里选择“标注”,

看看是不是已经改为“末端颜色”了。见图 3_3。

大多数程序员在美学方面不很在意,对话框上各个控件的摆放可能并不如您所愿,那您不妨自

己来布置一下对话框里各个控件的位置。挪动控件的位置也很简单,在 Resource Hacker 选中对话框

里的控件,用键盘上的箭头键挪动即可,做了改动之后别忘点击“Compile Script”按钮。

英文版本的在 D:\SProV8i\STAAD\Language\USEnglish\USEnglish.dll 这个文件里(图 3_4):

图 3_4 “标注”对话框的英文版界面

Page 4: 管窥软件的文件组成

结构软件学且思——以 STAAD为例QQ 群:30787198 敲门请写“玩结构的”

4

在 dll 文件里还经常能发现一些古董,您甚至可以在“Bitmap”那里找到 STAAD-III(上世纪 90年代的版本)这个版本的初始界面(图 3_5):

图 3_5 STAAD-III 的一个界面

1.31.31.31.3 软件 DNADNADNADNA鉴定利器——DependencyDependencyDependencyDependency WalkerWalkerWalkerWalker、ViewAPIViewAPIViewAPIViewAPI这一节只适合误入歧途非要搞搞软件开发的结构工程师。

对于软件开发初学者,无疑的,从分析和学习别人的代码入手能学得更快一些,这跟学习写作

之前要看很多范文是一个道理。

可惜,源代码经常被视为商业机密,对初学者而言,有实用价值的例程实在难寻。

只好退而求其次,站在门外看看别人都用了些什么开发工具,或者采用了什么控件,编写了哪

些函数也好。通过函数,甚至可以看出软件开发者所采用的架构和思路。分析到这个层面,已经可

以得到不少启发了。至于每个函数里的源代码,看不到也没关系,只有很少的算法需要通过阅读源

代码才能搞清编程者的思路,其他绝大部分源代码都是简单的重复劳动,看不到更清爽。

源代码被编译后,主要存放在后缀是 dll或者 exe 的文件中,想要从这些文件中窥探出有用的

信息,那就需要了解前面提到的 PE 格式了。幸好已经有人写好了这样的程序,比较著名的有

Dependency Walker,近些年国内又有一个类似的软件,叫做 ViewAPI。这两个都是免费软件。

Dependency Walker(http://www.dependencywalker.com)是由微软公司的 Steve Miller 开发的

免费软件。它可以告诉我们,某个 exe文件调用了哪些 dll文件,每个 dll文件中,又有哪些函数。

比如,我们用 Dependency Walker 软件打开 D:\SProV8i\STAAD\Staadpro.exe 这个文件,从图

3_6可以看到,此文件调用了 DBSECTIONINTERFACE.DLL、REIOPENGLLIB.DLL等将近 40来个

dll文件,当然这些 dll 文件还可能再去调用其他的 dll 文件。

从下图中,我们至少可以得出一些有用的信息:

� 采用 Visual C++5.0/6.0开发的。真够老的,微软的 Visual Studio2012都已经发布了。

� 采用了 OpenGL图形库而不是微软的 Direct X图形库。

具体到其中的某个 dll,比如 IBCSPECTRUM.DLL,可见其中包含了生成反应谱的对话框类

CGenerateSpectraDlg以及显示反应谱对话框类 CShowSpectraDlg。(“类”是一个编程术语)。

Page 5: 管窥软件的文件组成

结构软件学且思——以 STAAD为例QQ 群:30787198 敲门请写“玩结构的”

5

您可以用这个软件去查看一下您手头的结构软件里的一些 dll 文件,如果其中显示的函数名字

里有汉语拼音,那显然一定是国产软件了:)。如果某个软件里面的很多函数名跟别的软件的很多

函数名竟然一模一样,那么,您懂的,此处删略很多字。

近些年,软件行业的版权纠纷案件逐渐增多,有些软件企业的员工离职后(更嚣张的,在职的

也有),把前东家的代码搞出来,改改界面换一身新马甲就开始销售了,这显然是侵了前东家的权

的。2012 年国内最大的 IT 解决方案与服务供应商之一的东软公司(Neusoft)2012年夏天爆出的

内部员工侵犯知识产权案件,被列为辽宁省公安系统大案,并在公安系统内部通报。在类似的侵权

案件中,其实可以借助 Dependency Walker 这类软件来进行举证。

图 3_6 STAAD软件里 dll文件的关系图

i 戚利,Windows PE权威指南,机械工业出版社,2011/10