黑客手册第二课 消息框

黑客手册第二课 消息框

ID:40770846

大小:44.44 KB

页数:5页

时间:2019-08-07

黑客手册第二课 消息框_第1页
黑客手册第二课 消息框_第2页
黑客手册第二课 消息框_第3页
黑客手册第二课 消息框_第4页
黑客手册第二课 消息框_第5页
资源描述:

《黑客手册第二课 消息框》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、黑客手册第二课消息框在本课中,我们将用汇编语言写个Windows程序,程序运行时将弹出个消息框并显示"Win32assemblyisgreat!"。例子理论:Windows为编写应用程序提供了大量的资源。其中最重要的是WindowsAPI(ApplicationProgrammingInterface)0WindowsAPI是一大组功能强大的函数,它们本身驻扎在Windows中供人们随时调用。这些函数的大部分被包含在几个动态链接库(DLL)中,譬如:kerne132.dll、user32.dll和gdi32.dlloKern

2、e132.dll中的函数主要处理内存管理和进程调度;user32.dll中的函数主要控制用户界面;gdi32.dll中的函数则负责图形方面的操作。除了上面主要的三个动态链接库,您还可以调用包含在其他动态链接库中的函数,当然您必须要有关于这些函数的足够的资料。动态链接库,顾名思义,这些API的代码本身并不包含在Windows可执行文件中,而是当要使用时才被加载。为了让应用程序在运行时能找到这些函数,就必须事先把有关的重定位信息嵌入到应用程序的可执行文件中。这些信息存在于引入库中,由链接器把相关信息从引入库中找出插入到可执行文件

3、中。18必须指定正确的引入库,因为只有正确的引入库才会有正确的重定位信息。当应用程序被加载时Windows会检查这些信息,这些信息包括动态链接库的名字和其中被调用的函数的名字。若检查到这样的信息,Windows就会加载相应的动态链接库,并且重定位调用的函数语句的入口地址,以便在调用函数时控制权能转移到函数内部。如果从和字符集的相关性来分,API共有两类:类是处理ANSI字符集的,另类是处理UNIωDE字符集的。前类函数名字的尾部带个"A"字符,处理UNIωDE的则带个宵"字符(我想"γ也许是代表宽字符的意思吧)。我们比较熟悉

4、的ANSI字符串是以NULL结尾的串字符数组,每个ANSI字符是个BYTE宽。对于欧洲语言体系,ANSI字符集己足够了,但对于有成千上万个唯字符的几种东方语言体系来说就只有用UNICODE字符集了。每个UNIωDE字符占有两个BYTE宽,这样来就可以在个字符串中使用65336个不同字符了。。这也是为什么引进UNICODE的原因。在大多数情况下我们都可以用一个包含头文件,在其中定义一个宏,然后在实际调用函数时,函数名后不需要加后缀"A"或"w"。<译者注:如在头文件中定义函数fooO;!!ifdefUNICODE!!defin

5、efoo()fooW!!else!!definefooOfooAO!!endif例子:我先把框架程序放在下面,然后我们再向里面加东西。386.modelflat,stdcall.data.codestart:endstart应用程序的执行是从END定义的标识符后的第条语句开始的。在上面的框架程序中就是从START开始。程序逐条语句执行直到遇到JMP,JNE,JE,RET等跳转指令。这些跳转指令将把执行权转移到其他语句上,若程序要退出Windows,则必须调用函数ExitProcessExitProcessprotouExit

6、Code:DWORD上面行是函数原型。函数原型会告诉编译器和链接器该函数的属性,这样在编译和链接时,编译器和链接器就会作相关的类型检查。函数的原型定义如下:FunctionNamePROTO[ParameterNamel:DataType,[ParameterNamel:DataType,.简言之,就是在函数名后加伪指令PROTO,再跟串由逗号相隔的数据类型链表。在前面的ExitProcess定义中,该函数有个DWORD类型的参数。当您使用高层调用语句INVOKE时,使用函数原型定义特别有用,您可以简单地认为INVOKE是个

7、有参数类型检查的调用语句。譬如,假设您这样写:callExitProcess若您事先没把个DWORD类型参数压入堆梭,编译器和链接器都不会报错,但毫无疑问,在您的程序运行时将引起崩溃。但是,当您这样写:invokeExitProcess连接器将报错提醒您忘记压入个DWORD类型参数。所以我建议fg用INVOKE指令而不是CALL去调用个函数。INVOKE的语法如下:INVOKEexpression[,argumentslexpreSSl0n既可以是个函数名也可以是个函数指针。参数由逗号隔开。大多数API函数的原型放在头文件中

8、。如果您用的是hutch的MASM32,这些头文件在文件夹MASM32!include下,这些头文件的扩展名为INC,函数名和DLL中的函数名相同,譬如:KERNEL32.LIB引出的函数ExitProcess的函数原形声明于kernel.inc中。fg也可以自己声明函数原型。在我的教学课

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。