博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
探测调试器
阅读量:6937 次
发布时间:2019-06-27

本文共 1130 字,大约阅读时间需要 3 分钟。

 我怎么确定是不是运行在调试器下呢?

 

下面的代码展示最佳的判断方式

#include <assert.h>

#include <stdbool.h>

#include <sys/types.h>

#include <unistd.h>

#include <sys/sysctl.h>

 

static bool AmIBeingDebugged(void)

// Returns true if the current process is being debugged (either 

// running under the debugger or has a debugger attached post facto).

{

    int                 junk;

    int                 mib[4];

    struct kinfo_proc   info;

    size_t              size;

    // Initialize the flags so that, if sysctl fails for some bizarre 

    // reason, we get a predictable result.

    info.kp_proc.p_flag = 0;

    // Initialize mib, which tells sysctl the info we want, in this case

    // we're looking for information about a specific process ID.

    mib[0] = CTL_KERN;

    mib[1] = KERN_PROC;

    mib[2] = KERN_PROC_PID;

    mib[3] = getpid();

    // Call sysctl.

    size = sizeof(info);

    junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL0);

    assert(junk == 0);

    // We're being debugged if the P_TRACED flag is set.

    return ( (info.kp_proc.p_flag & P_TRACED) != 0 );

}

 

重要提示 因为 kinfo_proc 结构体的定义 ( <sys/sysctl.h>是有条件的依赖 __APPLE_API_UNSTABLE所以你应该限制上述代码的使用来调试编译你的工程。

本文转自 arthurchen 51CTO博客,原文链接:http://blog.51cto.com/arthurchen/790845,如需转载请自行联系原作者
你可能感兴趣的文章
胖AP&瘦AP
查看>>
git 拉取问题
查看>>
清空weblogic日志文件nohup.out
查看>>
MyBatis注解select in参数
查看>>
禁止有道爬虫
查看>>
java核心技术I
查看>>
关于用VS实现开机自启动功能(win7/winXp)
查看>>
重拾Python 笔记五
查看>>
Yii 日志
查看>>
我的友情链接
查看>>
3.2 双向链表
查看>>
MySQL for Mac 安装和基本操作
查看>>
MFC does not support WINVER less than 0x0501.
查看>>
如何用一年时间学完MIT四年的计算机科学课程
查看>>
网络之二
查看>>
Go应用程序使用dockerfile multi-stage的问题
查看>>
吐槽:iOS要获得联系人所属分组好麻烦
查看>>
中文环境下的Weblogic
查看>>
[Android]开源中国源码分析——UI设计XML文件分析
查看>>
Angular CLI 常用命令
查看>>