美文网首页
Detecting the Debugger

Detecting the Debugger

作者: crean | 来源:发表于2015-04-21 16:57 被阅读103次

    Q: How do I determine if I'm being run under the debugger?

    A: How do I determine if I'm being run under the debugger?
    The code in Listing 1 shows the best way to do this.

    #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, NULL, 0);
        assert(junk == 0);
    
        // We're being debugged if the P_TRACED flag is set.
    
        return ( (info.kp_proc.p_flag & P_TRACED) != 0 );
    }
    
    Important: Because the definition of the kinfo_proc structure (in <sys/sysctl.h>) is conditionalized by __APPLE_API_UNSTABLE, you should restrict use of the above code to the debug build of your program.
    
    https://developer.apple.com/library/mac/qa/qa1361/_index.html
    

    相关文章

      网友评论

          本文标题:Detecting the Debugger

          本文链接:https://www.haomeiwen.com/subject/yrjufttx.html