- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 理工大学图书馆 大体积毛石砼施工方案.doc
- 颅内血肿微创穿刺术操作规范.doc
- Excel使用技巧大全(一).doc
- 算法100题.doc
- 青岛版八年级下册数学第七章测试题.doc
- 职场“90后”就业观变了:要钱更要闲.doc
- 稍复杂的分数除法应用题说课稿.doc
- 抗金属干扰吸波材料RFID.pdf
- 青钢第二炼钢厂连铸水处理设施的改造.pdf
- Currency Exhcange Rate Oversight Reform Act of 20112011年货币汇率监督改革法案.pdf
- 人教版九年级英语全一册单元速记•巧练Unit13【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit9【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit11【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit14【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit8【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit4【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit13【单元测试·基础卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit7【速记清单】(原卷版+解析).docx
- 苏教版五年级上册数学分层作业设计 2.2 三角形的面积(附答案).docx
- 人教版九年级英语全一册单元速记•巧练Unit12【单元测试·基础卷】(原卷版+解析).docx
文档评论(0)