我听说windows下有Win32api开发,也就是说写出的程序直接访问系统的api,确实很强,这样可以了解系统到底能干什么,甚至怎么干的。那么由源代码到程序需要编译(编译做的工作貌似也很多,还有就是编译又能分成好几类,唉,也不懂啊),编译好的是不是就可以直接运行了?软件都有发布一说,发布后的.exe可以实现程序的安装,但是安装的后的程序目录下的东西貌似和编译过的不一样?这是为什么那?编译过的东西是不是就可以隐藏代码了?(安装后的目录里肯定是没有代码了)
编译过程对代码做了什么?发布安装又到底做了哪些工做?同样的问题,通过一些平台开发的软件的一生(从源代码到执行)(Java,C#)到底又经历了哪些阶段那?程序的执行最终是在操作系统的控制下执行的,而他们似乎还的需要jdk或者sdk一类的东西,他们对于在他们平台上开发的软件在运行时到底怎么实现控制啊?sdk 会调用系统的api吗?谁能用简单的句子,一步一步的给说下程序的一生:从源代码到执行会经历哪些阶段,忽然想知道。可能说的很含糊,用的词也不准确,大家都听不懂我想问什么,其实我也不知道我到底想知道什么,因为没见过缆车人肯定不敢问它有几个车轱辘(如果他知道缆车特别的话),但是他肯定好奇缆车是怎么走路的。其实这些词语我都不是很明白:win32api , dll , com , mfc 

解决方案 »

  1.   

    win32api
    32Bit Windows Application Programming Interface
    指的是32位Windows程序调用接口,也就是操作系统开放给应用程序的标准调用函数。
    dll
    dynamic link library
    在程序运行期间动态加载的库函数,它们共享相同的地址空间,并且只在运行期间加载并且重定位
    com
    component object model
    微软提出的组件对象模型规范,类似Java Beans
    mfc
    microsoft foundation classes
    和VC++配合的一套框架,包括封装Windows API的C++对象,函数,基于文档结构视图的程序框架。
    sdk
    software development kits
    原来是MS提供给开发者的一套软件,帮助厂商开发Windows应用程序,现在特指Windows平台下,直接调用Win32 API函数而不借助更高级的库函数的开发方式。原生Win32应用程序直接被机器执行,其间可以调用系统标准服务(Win32API)。
    Java程序需要Java虚拟机的支持(JVM/JRE)。
    .NET程序需要.NET CLR的支持。编译过程一般经历如下步骤:预处理-单词分析-语法分析-语义制导的翻译-中间代码生成-代码优化-目标代码生成。
    编译完成以后经过链接就可以得到可执行文件。
    打包是将所需要的可执行文件、附属文件、配置等等包括进来,变成一个可以自动将软件部署到目标电脑里面而不需要手工检查运行环境、复制文件、配置环境,直接可以运行的自动程序。
    程序运行由操作系统开辟一个进程,初始化进程控制块,读取磁盘上的执行文件镜像,加载到内存里面,加载对应模块,完成代码重定位,并且找到执行入口点开始执行程序。明白了么?
      

  2.   

    p.s. 
    (1) 你说的代码包括三种,一个是程序员编写的源代码;一个是供虚拟机运行的伪执行码,一个是机器代码。一般地说,计算机只能执行机器代码。机器代码和源代码在功能上等效。一般来说,从源程序代码到机器代码的过程是不可逆的,这主要表现在编译器去除了源程序中说明性、标记性的内容;优化编译删除了冗余的代码;更改了部分代码的执行顺序;源代码和目标代码不存在一一对应的关系。但是将目标代码反向生成源代码并非完全不可能,这个过程称为reverse engineering。
    (2) 以.NET举例(Java类似),伪执行码的运行过程。.NET程序包含一个执行头程序,首先如同一般程序那样,这个执行头程序被运行,这个头会检查系统的环境,如果不满足条件则报错退出,否则启动即时编译器将伪机器码转化为机器码,并且执行。这个转化包括一次性转化和部分转化(后者类似解释器)。其中程序和系统底层不直接打交道,需要通过一套抽象接口进行,这个环境叫运行时环境(Runtime).NET拥有复杂的运行时管理机制,比如垃圾回收,整个环境被称为CLR,对应Java平台叫JRE。
    (3) API并不能了解系统底层干什么,也不强,它只是一些普通的函数调用而已,只是这些函数调用的提供者是微软公司,至于实现机制,和用户自己写的没什么区别。要了解系统干了什么需要借助于调试器程序,内核级别的调试器,交叉调试器,乃至硬件模拟器等等。