Windows库连接之动态链接库

     从动态库中导出函数有两种方法, 使用模块定义,创建DEF文件,第一句必须是LIBRARY语句,EXPORTS语句导出函数,函数名后跟一个@和一个数字表示顺序值,DESCRIPTION语句可以对DLL用途进行描述。也可以不使用模块定义,在定义函数时使用关键字_declspec(dellexport).

  通过#pragma data_seg()可以生成公共段,共享块中的数据必须经过初始化,#pragma comment(linker,"/section:Shared,rws")语句指示连接器共享区域数据可读可写可共享。也可以在def文件中加语句SEGMENTS 变量名 read write shared;

  加载动态库连接的方法有两种。静态加载和动态加载。静态加载又称为隐式连接,动态加载又称为显示连接。使用静态加载除了需要DLL文件之外,还需要.lib文件。没有.lib文件,就要使用动态连接。使用LoadLibrary()获得模块句柄,使用GetProcAddress();获得导出函数指针,最后使用FreeLibrary()来完成dll的卸载。

    明白了动态链接库的操作后就可以写钩子了,这是一种很神奇的东西。可以写挂,写病毒。。。

    以前看过一点点黑客书籍,现在才明白,没有基础看那些东西只是空中楼阁,现在懂得东西稍微多了一点点,那些以前怎么看也看不懂的东西却自然而然的明白了。编程中,基础和经验才是王道。

  直接把钩子也说了吧,说完之后写个小例子。对了,给大家推荐点东西吧,感觉不错的。孙鑫老师的视频,想学MFC的最好看一下,最好先看书再看视频,我是看了《Windows 2000编程》,当然,看这个也得有基础,起码有点C/C++的基本功。最基本应该从《c++ primer plus》吧,<c++ programing language>最好也看看,这本书详细,可惜我没全看,争取以后完整读一遍。再就是什么<thinking in c++><c++ templates>等等。都值得一读。

  好了,言归正传,说钩子。相关函数很简单,SetWindowsHookEx(),UnhookWindowsHookEx(),CallNextHookEx(),具体查阅一下MSDN,它是最好的老师与帮手。

  直接举我的小例子了。有什么不对的地方,还请大家指出

hook.def

LIBRARY hook
EXPORTS
SetmymouseHook
Setmykeyhook
closehook

hook.cpp

#include<windows.h>
HHOOK h1,h2;
void closehook()
{
 UnhookWindowsHookEx(h1);
 UnhookWindowsHookEx(h2);
}
LRESULT CALLBACK MouseProc(
  int nCode,      // hook code
  WPARAM wParam,  // message identifier
  LPARAM lParam   // mouse coordinates
)
{
 return 1;
}
LRESULT CALLBACK KeyboardProc(
  int code,       // hook code
  WPARAM wParam,  // virtual-key code
  LPARAM lParam   // keystroke-message information
)
{
 if(wParam==VK_F1&& (1==(lParam>>29 & 1)))
 {
  closehook();
  return 1;
 }
 else
  return 1;
}
 

void SetmymouseHook()
{
h1=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("hook"),0);

}
void Setmykeyhook()
{
 h2=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hook"),0);
}

dll文件生成之后,写一个测试程序就ok了。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值