IsDebuggerPresent VC6.0编译时会报连接错误

IsDebuggerPresent函数可以用来检测本进程是否处于被调试状态,当然,这种方法的实用性不大。
此函数在winbase.h中声明如下:WINBASEAPI BOOL WINAPI IsDebuggerPresent(void);

如果本进程当前正在被调试则返回1,否则返回0。

直接调用此函数的源程序在用VC6.0编译时会报连接错误,原因是kernel32.lib中找不到_IsDebuggerPresent这个符号为了使用此函数,你不得不使用LoadLibrary动态加载kernel32.dll,或者使用GetModuleHandle获取kernel32.dll的映像地址,然后使用GetProcAddress取得IsDebuggerPresent的地址。

代码如下:

BOOL (*IsDebuggerPresent)();

HMODULE hModule= GetModuleHandle("kernel32.dll");
IsDebuggerPresent = (BOOL(*)())GetProcAddress(hModule, "IsDebuggerPresent");


反汇编kernel32.dll观察IsDebuggerPresent的代码可以看到:

7C813093  64:A1 18000000   mov     eax, dword ptr fs:[18]  |kernel32.IsDebuggerPresent
7C813099  8B40 30          mov     eax, dword ptr [eax+30]
7C81309C  0FB640 02        movzx   eax, byte ptr [eax+2]
7C8130A0  C3               ret
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值