2012年3月13日
摘要: APIHOOK实例剖析 关于APIHOOK的基础知识有很多,如dll的相关知识、Hook的相关知识、系统进程与线程之间的联系等。具体可以看我的另两篇文章:"我的Dll(动态链接库)学习笔记" 和 "我的Hook学习笔记"。:)下面进入这篇文章的重点,根据APIHook源码进行APIHook的剖析。一、APIHOOK之dll部分//////////////////////////////// APIHook_Dll.cpp ////////////////////////////////////////// rivershan写于2002.9.23 /// 阅读全文
posted @ 2012-03-13 18:01 carekee 阅读(494) 评论(0) 推荐(0) 编辑
摘要: 关于Hook一、基本概念: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。二、运行机制:1、钩子链表和钩子子程: 每一个Hook都有一个与. 阅读全文
posted @ 2012-03-13 18:00 carekee 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 在DLL中使用资源(一) 在CSDN论坛上最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题。这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题。1.Win32 DLL 在Win32 DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件。然后使用DialogBox或者CreateDialog这两个函数(或相同作用的其它函数)来创建对话框,并定义你自己的对话框回调函数处理对话框收到的消息。下面通过一个具体实例来学习如何在Win32 DLL中使用对话框,可以按照以下步骤来完 阅读全文
posted @ 2012-03-13 17:58 carekee 阅读(1529) 评论(0) 推荐(0) 编辑
摘要: 2、动态链接到MFC的DLL 在讨论关于动态链接到MFC的DLL的模块状态问题之前,先来看一个例子。本例可以通过如下步骤来完成:1)在VC菜单中File->New新建一个命名为DLLShared的MFC AppWizard的工程,下一步选择Regular DLL using shared MFC DLL。2)在工程中添加一个对话框资源,其ID为:IDD_ABOUTBOX。并在resource.h之中将IDD_ABOUTBOX 的数值改为100。3)在DLLShared.cpp中定义如下函数:void ShowDlg(){ CDialog dlg(IDD_ABOUTBOX); dlg.Do 阅读全文
posted @ 2012-03-13 17:58 carekee 阅读(302) 评论(0) 推荐(0) 编辑
摘要: DLL中调用约定和名称修饰(三)2、C++编译时函数(非类成员函数)名称修饰当函数使用__cdecl调用约定时,编译器进行以下工作:1.以?标识函数名的开始,后跟函数名;2.函数名后面以@@YA标识开始,后跟返回值和参数表;3.当函数的返回值或者参数与C++类无关的时候,返回值和参数表以下列代号表示: B:constD:charE:unsigned charF:shortG:unsigned shortH:intI:unsigned intJ:longK:unsigned longM:floatN:double_N:boolPA:指针(*,后面的代号表明指针类型,如果相同类型的指针连续出现,以 阅读全文
posted @ 2012-03-13 17:57 carekee 阅读(390) 评论(0) 推荐(0) 编辑
摘要: DLL中调用约定和名称修饰(一)调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议。这种协议规定了该语言的函数中的参数传送方式、参数是否可变和由谁来处理堆栈等问题。不同的语言定义了不同的调用约定。在C++中,为了允许操作符重载和函数重载,C++编译器往往按照某种规则改写每一个入口点的符号名,以便允许同一个名字(具有不同的参数类型或者是不同的作用域)有多个用法,而不会打破现有的基于C的链接器。这项技术通常被称为名称改编(Name Mangling)或者名称修饰(Name Decoration)。许多C++编译器厂商选择了自己的名称修饰方案。因此, 阅读全文
posted @ 2012-03-13 17:56 carekee 阅读(236) 评论(0) 推荐(1) 编辑
摘要: DLL中调用约定和名称修饰(二)4、thiscallthiscall调用约定是C++中的非静态类成员函数的默认调用约定。thiscall只能被编译器使用,没有相应的关键字,因此不能被程序员指定。采用thiscall约定时,函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,只是另外通过ECX寄存器传送一个额外的参数:this指针。这次的例子中将定义一个类,并在类中定义一个成员函数,代码如下:class CSum {public:int Add(int a, int b){return (a + b);}};void main(){ CSum sum; sum.Add(1, . 阅读全文
posted @ 2012-03-13 17:56 carekee 阅读(216) 评论(0) 推荐(0) 编辑
摘要: DLL(Dynamic Link Libraries)专题: 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的EXE程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。 Windows系统平台上提供了一. 阅读全文
posted @ 2012-03-13 17:55 carekee 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 在讨论关于动态链接到MFC的DLL的模块状态问题之前,先来看一个例子。本例可以通过如下步骤来完成: 1)在VC菜单中File->New新建一个命名为DLLShared的MFC AppWizard的工程,下一步选择Regular DLL using shared MFC DLL。2)在工程中添加一个对话框资源,其ID为:IDD_ABOUTBOX。并在resource.h之中将IDD_ABOUTBOX 的数值改为100。3)在DLLShared.cpp中定义如下函数:void ShowDlg(){ CDialog dlg(IDD_ABOUTBOX); dlg.DoModal();}4)在DL 阅读全文
posted @ 2012-03-13 17:51 carekee 阅读(564) 评论(0) 推荐(0) 编辑
摘要: 基础慨念1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的 EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动.. 阅读全文
posted @ 2012-03-13 17:50 carekee 阅读(1351) 评论(0) 推荐(1) 编辑
摘要: VC++动态链接库编程之MFC规则DLL 第4节我们对非MFC DLL进行了介绍,这一节将详细地讲述MFC规则DLL的创建与使用技巧。 另外,自从本文开始连载后,收到了一些读者的e-mail。有的读者提出了一些问题,笔者将在本文的最后一次连载中选取其中的典型问题进行解答。由于时间的关系,对于读者朋友的来信,笔者暂时不能一一回复,还望海涵!由于笔者的水平有限,文中难免有错误和纰漏,也热诚欢迎读者朋友不吝指正! 5. MFC规则DLL 5.1 概述 MFC规则DLL的概念体现在两方面: (1) 它是MFC的 “是MFC的”意味着可以在这种DLL的内部使用MFC; (2) 它是规... 阅读全文
posted @ 2012-03-13 17:50 carekee 阅读(424) 评论(0) 推荐(0) 编辑
摘要: (Win32 DLL 工程,或者其他Console或MFC工程等)1。在VC编译器中,选择Insert --》Resource,选中Bitmap--》Import,将文件类型修改为所有类型。---》找到bmp文件,并载入,此时产生一个IDB_BITMAP1资源句柄。2。载入后,先别急,保存一次,则会产生这个bmp文件对应的rc资源文件。3。这个时候,如果不是MFC工程,则需要在调用LoadImage或LoadBitmap函数的.CPP文件中,先包含一句:#include "resource.h"如此,则之前产生的IDB_BITMAP1资源句柄可以被使用了,如果没有包含这个头 阅读全文
posted @ 2012-03-13 17:49 carekee 阅读(2097) 评论(0) 推荐(0) 编辑