探测调试器

简介:

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

 

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

#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,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
C++ Windows
使用 windbg gflags dumpbin 排查应用程序启动错误
使用 windbg gflags dumpbin 排查应用程序启动错误
|
17天前
|
iOS开发 MacOS
macos排查并禁用系统占用的8021端口
macos排查并禁用系统占用的8021端口
17 0
|
8月前
8.9 RDTSC时钟检测反调试
RDTSC时钟检测同样可实现反调试检测,使用时钟检测方法是利用`rdtsc`汇编指令,它返回至系统重新启动以来的时钟数,并且将其作为一个64位的值存入`EDX:EAX`寄存器中,通过运行两次`rdstc`指令,然后计算出他们之间的差值,即可判定对方是否在调试我们的程序。
42 1
|
8月前
|
存储 安全 API
调试实战 | 通过转储文件分析程序无响应之使用 windbg + IDA 逆向篇
调试实战 | 通过转储文件分析程序无响应之使用 windbg + IDA 逆向篇
|
编译器 C++
关于 QtCreator无法自动探测到v140编译器(VS2017安装v140和141) 的解决方法
关于 QtCreator无法自动探测到v140编译器(VS2017安装v140和141) 的解决方法
关于 QtCreator无法自动探测到v140编译器(VS2017安装v140和141) 的解决方法
|
Windows
【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
271 0
【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
|
NoSQL 前端开发 Linux
【调试】SystemTap调试网卡状态一例
调试其实不仅仅是针对内核或者进程崩溃的情况,很多时候我们需要跟踪的问题并不是通过分析一个core dump能够解决的,比如类似一些状态信息输出不对,或者内核或程序行为不符合预期。此时我们经常需要依赖于日志,尤其是内核层面的问题。
【调试】SystemTap调试网卡状态一例
|
Linux
bmon:一个强大的网络带宽监视和调试工具
bmon 是类 Unix 系统中一个基于文本,简单但非常强大的 网络监视和调试工具,它能抓取网络相关统计信息并把它们以用户友好的格式展现出来。它是一个可靠高效的带宽监视和网速估测工具。 它能使用各种输入模块读取输入,并以各种输出模式显示输出,包括交互式文本用户界面和用于脚本编写的可编程文本输出。
2089 0