软件保护技术-备课.doc

上传人:m**** 文档编号:557778597 上传时间:2023-02-20 格式:DOC 页数:73 大小:558KB
返回 下载 相关 举报
软件保护技术-备课.doc_第1页
第1页 / 共73页
软件保护技术-备课.doc_第2页
第2页 / 共73页
软件保护技术-备课.doc_第3页
第3页 / 共73页
软件保护技术-备课.doc_第4页
第4页 / 共73页
软件保护技术-备课.doc_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《软件保护技术-备课.doc》由会员分享,可在线阅读,更多相关《软件保护技术-备课.doc(73页珍藏版)》请在金锄头文库上搜索。

1、软件保护技术 备课笔记步山岳 计算机工程系第1章 基础知识 1.1文本编码方式美国信息交换标准码(ASCII: American Standard Code for Information Interchange)是一个七位的编码标准,包括26个小写字母、26个大写字母、10个数字、32个符号、33个控制代码和一个空格,总共128个代码。如“1”的ASCII码是31H(48D),“A”的ASCII码是41H(65D),“a”的ASCII码是61H(97D)。由于计算机通常用一个“字节( byte)”8位二进制的存储单位来进行信息交换,因此,ASCII码在计算机中用8位来表示,最高位补0。其他字

2、符集,是对ASCII码的扩展,例如ANSI(American National Standards Institute)、Symbol、OEM等字符集是8位字符集,值在127以下的部分是和ASCII相同。Unicode也是ASCII的一个扩展。在Unicode用两个字节来表示,是一种双字节编码机制的字符集,可表示65536个字符,使用065535之间的双字节无符号整数对每个字符进行编码,本书把Unicode称宽字符(Widechars)在Unicode中,所有的7位ASCII码都被扩充为16位,高位扩充的是零。如“pediy”,它的ASCII码是:0x70 0x65 0x64 0x69 0x7

3、9 其Unicode码的十六进制是: 0x0070 0x0065 0x0064 0x0069 0x0079Intel处理器存放数据时,低位字节存入低地址,高位字节存入高地址。注意:内存地址编号是“上(左)”为低地址编号,“下(右)”为高地址编号,看图1.1。 1.2 Windows API函数 1.2.1什么是API函数1什么是API函数?API函数是提供应用程序运行所需要的窗口管理、图形设备接口、内存管理等各项服务功能的函数,提供这些功能以函数库的形式组织在一起,形成了Windows应用程序编程接口(API Application Programming Interface),简称WinAP

4、I。看图1.2,Win API子系统将API调用转换成Windows操作系统的系统服务调用,在它的下面是Windows的操作系统核心,而它的上面则是Windows应用程序。可以说Win API是构筑Windows框架的核心基石。API函数从Windows 1.0支持不到450个函数,到现在己有几千个函数。2API函数在计算机或操作系统的什么地方?API函数在计算机或操作系统的什么地方:动态链接库DLL(Dynamic-Link Library),Windows运转的核心就是“动态链接”。3什么是动态链接库DLL?DLL就是包含了若干个函数、类和资源的库文件,它可以被其它可执行文件(如.EXE文

5、件和其它DLL文件)动态调用。4动态链接库的优点使用DLL的使多个应用程序,甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了“资源共享”,同时,节省内存,减少交换操作,节省磁盘空间。DLL自己不能直接执行,但其他程序可以调用 DLL 中的一个实例。在静态链接中,链接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。占用内存等。5API函数分类Windows将完成不同功能的API函数分类放到不同DLL中,如:Kernel32.dll:包括进程与线程控制、内存管理、文件访问等,提供操作系统核心功能服务;User32.dll:负责处理用户接口,包括键盘和鼠标输入、窗

6、口和菜单管理等;Gdi32.dll:图形设备接口,允许程序在屏幕和打印机上显示文本和图形;Kernel、User和GDI是Windows三个主要的动态链接库。Advapi32.dll:包括对象安全性、注册表操作;COMCTL32.DLL:通用控件;COMDLG32.DLL:公共对话框;SHELL32.DLL:用户界面外壳;DIBENG.DLL:图形引擎;NETAPI32.DLL:网络。6DLL文件位置在Windows NT/2000/XP中,这些DLL文件通常位于系统安装目录里的WindowsSYSTEM或WindowsS YSTEM32子目录中。1.2.2 什么是句柄句柄(Handle)是W

7、indows用来标识被应用程序所建立或使用的对象的唯一整数值(32位,长整型Long)。Windows使用各种各样的句柄标识诸如应用程序实例,窗口,控件,位图,GDI对象等。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。举例说明。当一个进程被初始化时,系统要为它分配一个句柄表,句柄值是放入进程的句柄表中的索引。当调试一个应用程序并且观察内核对象句柄的实际值时,会看到一些较小的值,如1,2等。句柄的值可能随时变更。如,在Windows 2000中,返回的值用于标识放入进程的句柄表的该对象的字节数,而不是索引号本身。因

8、此,在Windows的不同版本下调试程序时,句柄值的表达形式是不同的。在编程时,不必关心句柄值的大小。1.2. 3常用Win32 API函数 1 知道常用Win32 API函数的重要性由于Win32程序大量调用系统提供的API函数,而Win32平台上的调试器,如SoftICE等,恰好有针对API函数设置断点的强大功能,因而掌握常用的API函数具体用法会给跟踪调试程序带来极大的方便,学会使用API函数也是高级程序所必备条件。详细的Win 32 API参考文档可以从MSDN中获得。2API函数是区分字符集的API函数是区分字符集的:A表示ANSI,是单字节方式;W表示Widechars即Unico

9、de,是宽字节方式,以方便处理双字节字符。用字符串作参数的每个Win32函数在操作系统中都有两种方式的版本。例如,编程时使用MessageBox函数,而在USER32.DLL中,有两个入口点,一个名为MessageBoxA (ANSI版),另一个名为MessageBoxW(宽字符版)。但程序员通常不必关心这个问题,程序中只需要使用MessageBox时,开发工具中的编译模块会根据设置自动决定采用MessageBoxA还是MessageBoxW。3常用Win32 API函数(1)GetWindowText函数此函数在USER32.DLL用户模块中,它的作用是取得一个窗体的标题文字,或者一个文本控

10、件的内容。函数原型:int GetWindowText( HWND hWnd /获取文字的那个窗口或文本控件的句柄 LPTSTR lpString /预定义一个存放字符的起始缓冲区地址 int nMaxCount /lpString复制最大字符数,即缓冲区的长度 ); 16位:GetWindowText 32位:ANSI版是GetWindowTextA,Unicode版是GetWindowTextW。API函数的数据类型:HWND:Windows句柄,Handle to a windowLPTSTR:定义一个32位的指针,指向16位字符串,可以兼容8位字符串。A 32-bit pointer

11、to a character string that is portable for Unicode and DBCS(Double-byte Character Set)(2)GetDlgItem函数此函数在USER32.DLL用户模块中,它的作用是获取指定对话框的句柄。(3) GetDlgItemText函数此函数在USER32.DLL用户模块中,它的作用是获取对话框文本。(4)GetDlgItemInt函数此函数在USER32.DLL用户模块中,它的作用是获取对话框整数值。(5)MessageBoxEx函数此函数是在USER32.DLL用户模块中,创建和显示信息框。函数原型:int Me

12、ssageBoxEX(HWND hWnd, / HWND:窗口句柄,获取窗口句柄LPCTSTR lpText, / LPCTSTR:LPCTSTR:定义一个32位的指针(LP),/指向16位常数(C)字符串,/可以兼容8位字符串。/定义一个消息框中文字的起始地址LPCTSTR lpCaption, /定义一个消息框标题起始地址UINT uType / UINT:无符号整型,定义一个消息框类型,无符号整型 WORD wLanguageID / WORD:字型,定义一个语言标识);API函数的数据类型:HWND:Windows句柄LPCTSTR:定义一个32位的指针(LP),指向16位常数(C)字

13、符串,可以兼容8位字符串。UINT:无符号整型,可以是16位或32位,A 16-bit unsigned integer on Windows versions 3.0 and 3.1; a 32-bit unsigned integer on Win32.WORD:16位无符号整型数,A 16-bit unsigned integer,其中wLanguageId保留,inReserved。ANSI版是MessageBoxExA,Unicode版是MessageBoxExW。(6)MessageBox函数此函数是在USER32.DLL用户模块中,创建和显示信息框。常用MessageBox1.3

14、 Windows 2000/XP与Unicode ANSI与Unicode字符串相互转换Unicode影响到计算机工业的每个部分,对操作系统和编程语言的影响最大。Windows NT系统核心完全是用Unicode函数工作的,既支持Unicode,也支持ANSI,如果在调用Windows函数并使用ANSI字符串,那么系统首先要将字符串转换成Unicode,然后再将Unicode传递给操作系统。如果希望函数返回ANSI函数,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结果返回给应用程序。Unicode在Windows 2000/XP下执行效率比ANSI要高,看教材P9例。1.4 Windows消息机制1什么是事件和消息?“事件”是“对象”可识别的动作,通过“事件”产生消息。“消息”是通知“对象”执行的动作,是面向对象程序设计中的一个重要概念。2Windows消息驱动方式Windows是一个消息(Message)驱动式系统,Windows消息提供应用程序与应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理来完成。实现消息(Message)驱动的基石是面向对象程序设计方法。Windows系统中有两种消息队列:一种是系统消息队列,另一种是应用程序消息队列。计算机的所有输入设

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号