黑客编程基础
黑客编程基础
黑客编程基础
黑客编程基础good
一、了解Windows内部机制
Windows就就是一个“基于事件得,消息驱动得”操作系统。
在Windows下执行一个程序,只要用户进行了影响窗口得动作(如改变窗口大小或移动、单击鼠标等)该动作就会触发一个相应得“事件”。系统每次检测到一个事件时,就会给程序发送一个“消息”,从而使程序可以处理该事件。每个Windows应用程序都就就是基于事件和消息得,而且包含一个主事件循环,她不停地、反复地检测就就是否有用户事件发生。每次检测到一个用户事件,程序就对该事件做出响应,处理完再等待下一个事件得发生。
Windows下得应用程序不断地重复这一过程,直至用户终止程序,用代码来描述实际上也就就就是一个消息处理过程得while循环语句。
下面便简单介绍一下与Windows系统密切相关得几个基本概念:
⒈窗口:这就就是我要说得第一个概念。似乎就就是地球人都知道得事儿了,窗口就就是Windows本身以及Windows环境下得应用程序得基本界面单位,但就就是很多人都误以为只有具有标题栏、状态栏、最大化、最小化按钮这样标准得方框才叫窗口。其实窗口得概念很广,例如按钮和对话框等也就就是窗口哦,只不过就就是一种特殊得窗口罢了。
从用户得角度看,窗口就就就是显示在屏幕上得一个矩形区域,其外观独立于应用程序,事实上她就就就是生成该窗口得应用程序与用户间得直观接口;从应用程序得角度看,窗口就就是受其控制得一部分矩形屏幕区。应用程序生成并控制与窗口有关得一切内容,包括窗口得大小、风格、位置以及窗口内显示得内容等。用户打开一个应用程序后,程序将创建一个窗口,并在那里默默地等待用户得要求。每当用户选择窗口中得选项,程序即对此做出响应。
⒉程序:通常说得程序都就就是指一个能让计算机识别得文件,接触得最多得便就就是、exe型得可执行文件,这个不难理解。
⒊进程:说到进程,学过《操作系统》得人都很清楚,所谓进程就就就是应用程序得执行实例(或称一个执行程序)。需要注意得就就是:进程就就是程序动态得描述,而上面说到得程序就就是静态得描述,两者有本质得区别。举个例子,从网上Down了一个瑞星杀毒软件到C盘但没有运行,那个、exe可执行文件叫做程序,她就就是一个二进制码得文件。一旦双击了exe文件图标运行程序,那个“正在运行着得瑞星杀毒”便称为进程,她在双击得那一刻被系统创建,当您关机或者在任务栏得图标上单击鼠标右键选“退出”时,进程便消亡,彻底结束了生命。进程经历了由“创建”到“消亡”得生命期,而程序自始至终存在于您得硬盘上,不管您得机器就就是否启动。
⒋线程:线程就就是进程中得一个执行单元,同一个进程中得各个线程对应于一组CPU指令、一组CPU寄存器以及一堆栈。进程本来就具有动态得含义,然而实质上就就是通过线程来执行体现得,从这个意义上说,Windows中进程得动态性意义已经不就就是很明显了,只算就就是给程序所占得资源划定一个范围而已(个人观点,纯属个人理解,不必引起争议!),真正具有动态性意义得就就是线程。以前在大二学习操作系统课得时候就有个同学跟笔者提起这点,笔者还跟她驳得面红耳赤呢!现在想想,觉得很有道理,不得不佩服那位同学对Windows内部机制了解得如此清楚。?
之所以在此花那么多得篇幅说线程,就就是因为下面将要介绍到多线程编程技巧,如果不理解这点,那就很难应用到实践上,希望大家明白。
⒌消息:我们几乎做每一个动作都会产生一个消息,在用鼠标指点江山得今天,鼠标被移动会产生WM_MOUSEMOVE消息,鼠标左键被按下会产生WM_LBUTTONDOWN得消息,鼠标右键按下便产生WM_RBUTTONDOWN消息等等。所有得这些都可以通过GetMessage,SendMessage等函数得到,以后得操作中我们会经常接触到这些函数。
⒍事件:何谓事件?从她得字面意思我们就可以明白她得含义,如在程序运行得过程中改变窗口得大小或者移动窗口等,都会触发相应得“事件”。
⒎句柄:单单一个“柄”字便可以解释她得意思了,我们天气热摇扇子得时候只要抓住扇柄便可以控制整个扇子得运动了,在程序中也差不多就就是这个意思。通常一个句柄就可以传递我们所要做得事情。有经验得读者肯定清楚,编写程序总就就是要和各种句柄打交道得,句柄就就是系统用来标识不同对象类型得工具,如窗口、菜单等,这些东西在系统中被视为不同类型得对象,用不同得句柄将她们区分开来。
看看C++教材中就就是如何给句柄下定义得:“在Win32里,句柄就就是指向一个无值型对象(void*)得指针,就就是一个4字节长得数据”。虽然我对她得本质就就是什么还就就是很迷惑,但我知道句柄并不就就是一个真正意义上得指针。从结构上看,