Windows窗口应用程序的运行机理研究.docx

Windows窗口应用程序的运行机理研究.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows窗口应用程序的运行机理研究

Windows窗口应用程序的运行机理研究2009-08-04摘要:本文从Win32汇编语言的角度构造了Windows窗口应用程序的窗口过程,演示了Windows消息循环的维护机制,揭开了Windows窗口应用程序的运行机理,对于理解Windows基于消息的工作方式和进行Windows操作系统下的程序设计具有非常重要的意义。关键字:消息;事件;窗口;Windows应用程序;Win32汇编语言?0 引言Windows是一个以消息为基础、事件驱动(Message Based、Event Driven)的操作系统。窗口是由Windows操作系统来产生和管理的,Windows操作系统从创建到终止一个窗口应用程序是一个非常复杂的过程,研究Windows窗口应用程序的运行机理对于理解Windows基于消息的工作方式及进行Windows操作系统下的程序设计有非常重要的意义。Win32汇编语言具有简洁(Simple)和纯朴(Pure)的特点,它能够直接调用API函数,因此,本文通过Win32汇编语言来研究Windows窗口应用程序的运行机理。?1 一个进程的诞生和死亡的典型过程在Windows操作系统下,执行一个程序,必然就产生一个进程(Process)。最直接的程序执行方式就是在shell(如Windows资源管理器或文件管理器)中以鼠标双击某一个可执行文件图标(假设其为myApp.exe),执行的myApp进程其实是shell调用CreateProcess激活的。整个过程是这样的:1、? shell调用CreateProcess激活myApp.exe2、? 操作系统产生一个“进程核心对象(kernel object)”,计数值为13、? 系统为此进程建立一个4GB地址空间4、? PE加载器根据记录在myApp.exe文件中的信息将必要的代码加载到上述地址空间中,包括myApp.exe的程序、数据,以及所需的动态链接库函数(DLLs)。5、? 系统为此程序建立一个线程,称为主线程(primary thread)。线程是CPU时间的分配对象。6、? 系统调用C runtime函数库的Startup code。7、? Startup code调用myApp程序的WinMain函数。8、? myAPP程序开始运行9、? 用户关闭myApp程序的主窗口,使WinMain中的消息循环终止。10、回到Startup code11、回到Windows操作系统,系统调用ExitProcess结束进程。?2 用Win32汇编语言创建一个具体而微的Windows窗口应用程序根据以上的进程过程,我们可以使用汇编语言来生成一个Windows窗口应用程序。在用C++开发Windows应用程序时,WinMain()函数是应用程序执行时的入口点,通常也是应用程序结束任务退出的出口点。在WinMain函数,需要完成以下几个任务:1、????? 初始化窗口类结构,对窗口类进行注册2、????? 创建并显示窗口,进行必要的初始化数据处理3、????? 创建并启动窗口消息循环4、????? 响应WM_QUIT等消息,退出应用程序。Win32汇编语言的入口点是从.code代码段开始,它没有C++的WinMain函数,但出于移植方便,这里创建了一个WinMain函数,下面这段汇编代码描述了一个典型的Windows应用程序的生命过程。invoke GetModuleHandle,NULLMOV hInstance,EAXinvoke GetCommandLineMOV CommandLine,EAXinvoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULTinvoke ExitProcess,EAXWinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD;设置wc属性,此处省略代码invoke RegisterClassEx,addr wcinvoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInst,NULLMOV hwnd,EAXinvoke ShowWindow,hwnd,SW_SHOWNORMALinvoke UpdateWindow,hwnd.WHILE TRUE invoke GetMessage,ADDR msg,NULL,0,0 .BREAK .IF (!EAX) invoke Tra

您可能关注的文档

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档