检测 Mac OS X 上的调试器

2023-12-21

我试图检测我的进程是否正在调试器中运行,在 Windows 中有很多解决方案,在 Linux 中我使用:

ptrace(PTRACE_ME,0,0,0) 

并检查其返回值,我没有设法在 Mac OS X 上执行相同的基本检查。 我尝试使用

ptrace(PT_TRACE_ME,0,0,0)

打电话但是它always即使在 gdb 下运行也返回 0。

如果我将请求更改为PT_DENY_ATTACH它正确地停止了调试,但这不是我想要实现的目标。有任何想法吗?


你只需调用该函数即可AmIBeingDebugged() from 苹果技术问答 QA1361 https://developer.apple.com/library/archive/qa/qa1361/_index.html,此处转载是因为 Apple 有时会破坏文档链接并使旧文档难以找到:

#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 );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测 Mac OS X 上的调试器 的相关文章

  • 在 C++ 中,std::string::push_back() 的摊余复杂度是 O(1) 吗?

    我知道标准指定它适用于向量 但是字符串呢 是的 它是摊销常数时间 请参见第 716 页的表 101本文件的 http www open std org jtc1 sc22 wg21 docs papers 2012 n3485 pdf 表
  • 沿着长数据序列在固定大小的移动窗口中查找中值

    给定一个数据序列 可能有重复项 一个固定大小的移动 窗口 从数据开始处每次迭代时移动窗口 序列 使得 1 从窗口中删除最旧的数据元素并添加新数据 元素被推入窗口 2 求每次移动时窗口内数据的中位数 以下帖子没有帮助 有效地找到随机序列的中值
  • 是否可以通过引用以基类作为参数的函数来传递派生类

    假设我们有一个抽象基类IBase使用纯虚方法 接口 然后我们推导出CFoo CFoo2来自基类 我们有一个知道如何使用 IBase 的函数 Foo IBase input 这些情况下通常的场景是这样的 IBase ptr static ca
  • 为什么不能使用initializer_list来初始化unique_ptr的向量? [复制]

    这个问题在这里已经有答案了 我想知道为什么initializer list 不能与unique ptr 一起使用 std vector
  • 函数的不明确的引用/值版本

    考虑以下函数原型 void Remove SomeContainer Vec const std size t Index SomeContainer Remove SomeContainer Vec const std size t In
  • 如何自定义 ASP.Net Core 模型绑定错误?

    我只想从我的 Web API Asp net Core 2 1 返回标准化的错误响应 但我似乎不知道如何处理模型绑定错误 该项目刚刚从 ASP NET Core Web 应用程序 gt API 模板创建 我有一个简单的操作定义为 Route
  • ASP.NET Core 中 AsNoTracking 的模拟或更好的解决方法

    您如何模拟 AsNoTracking 或者是否有更好的解决方法来解决此问题 Example public class MyContext MyContextBase Constructor public MyContext DbContex
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • 如何检查 MVC cshtml 页面中的调试模式

    如何检查 MVC cshtml 页面中的调试模式 此代码在 cshtml 页面中不起作用 bool isRelease false if DEBUG isRelease false else isRelease true endif if
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • 为什么Windsor只能拦截虚方法或接口方法?

    我正在阅读文档 发现如果不使用接口 那么 Windsor 只能拦截虚拟方法 这是 Windsor 的限制还是 C 语言的限制 我正在寻找深入的答案 C 语言在这里完全无关 问题是拦截在运行时级别如何工作 一种技术是从类继承 实现接口并将其用
  • 二维数组的列求和

    我有一个IEnumerable
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • Ajax 函数在重定向后不保存滚动位置

    正如标题所述 我编写了一个 ajax 函数 该函数应该滚动到用户在重定向之前所在的位置 我写了一个alert对于测试场景 它确实触发了 但滚动不断回到顶部 我在这里做错了什么 JavaScript ajax type GET url Adm
  • 函数中的重复参数检查

    我经常有调用层次结构 因为所有方法都需要相同的参数 如果我不想将它们放在实例级别 类的成员 那么我总是问我在每个方法中检查它们的有效性是否有意义 例如 public void MethodA object o if null o throw
  • C# 或 Windows 相当于 OS X 的 Core Data?

    我迟到了 现在才开始在 OS X Cocoa 中使用 Core Data 它令人难以置信 并且确实改变了我看待事物的方式 C 或现代 Windows 框架中是否有等效的技术 即拥有可免费保存 数据管理 删除 搜索的托管数据类型 还想知道Li
  • PARITY_NONE 是 C++ Windows 中的关键字吗?

    我正在使用 boost 编写一个串行库 并且我有一个枚举 enum parity t PARITY NONE PARITY ODD PARITY EVEN 我收到如下错误 错误 1 错误 C2059 语法错误 我无法弄清楚问题是什么 然后我
  • 如何正确地将十六进制转义添加到字符串文字中?

    当你有C语言的字符串时 你可以在里面直接添加十六进制代码 char str abcde a b c d e 0x00 char str2 abc x12 x34 a b c 0x12 0x34 0x00 这两个示例在内存中都有 6 个字节
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一

随机推荐

  • 如何检查用户是否在不和谐上具有角色

    我正在努力寻找一种方法来检查用户是否具有角色 我知道如何找到某个角色 public Role findRole Guild guild String name List
  • 如何通过 http 提供静态文件

    我正在关注有关的教程在 Go 中构建网页 http golang org doc articles wiki 本教程中的所有内容都很容易掌握 但我正在尝试对其进行扩展 具体来说 我正在尝试添加一些静态文件 图片 我一直在浏览 go 文档并遇
  • Rails after_save 回调被多次调用

    我正在尝试通过 mixin 注入 after save 回调 但我的 rspec 测试告诉我 当create方法被调用 为什么该方法被调用两次 以下 rspec 测试失败 it should call callback do Product
  • rhc 设置返回“警告:常量 ::TimeoutError 已弃用”

    环境 Ubuntu 16 04 xenial Linux 内核 4 4 0 22 generic 红宝石 版本 ruby 2 3 0p0 2015 12 25 x86 64 linux gnu 复制步骤 sudo apt get insta
  • 禁用特定页面上的 Javascript 执行 (HTML/PHP)

    是否有任何 HTTP 标头可以禁用特定页面的 Javascript 我的网站提供用户生成的 HTML 内容 这就是为什么我不能只使用htmlenitities 并且我想阻止脚本编写 JavaScript 注入 我已经使用 HttpOnly
  • 为什么在 Scala 中重写的变量会得到错误的值?

    我在 Scala 中有一个 A 类 就像这样 class A val a 3 lazy val b 2 println a a println b b 接下来 我将这个类扩展到另一个 B 类 class B extends A overri
  • MySql:用列表设置变量

    我已经研究 MySQL 语句和类似问题有一段时间了 但我似乎没有任何运气 我可以创建一个变量来存储要在多个查询中使用的 1 列数据结果吗 这样做会有效吗 还是我对 DB 与 PL 的区别感到困惑 我在想类似下面的伪代码 SET list S
  • Pandas - 在方法链中使用分配和 if-else 语句

    我有 R 背景 我正在尝试复制mutate pandas 中 dplyr 的函数 我有一个如下所示的数据框 data name Jason Molly Tina Jake Amy age 42 52 36 24 73 preTestScor
  • 如何在不影响超类的情况下重写 Ruby 子类中的变量?

    假设我有一个带有一些 静态 变量的类 我希望该类的子类能够覆盖这些变量而不影响原始类 使用类变量是不可能的 因为这些变量似乎在子类和超类之间共享 class Foo test a def speak puts test end end cl
  • Eclipse、Git 和 Bitbucket - 无法推送 - 错误 401 未经授权

    我在使用 Bitbucket 和 Egit 时遇到问题 我在 BitBucket 上创建了一个新存储库 还在 Eclipse 中创建了一个新项目 当我尝试推送提交时 收到以下错误消息 Can t connect to any reposit
  • “只能加入可迭代的”python 错误

    我已经看过这篇关于可迭代 python 错误的文章 只能迭代 Python 错误 https stackoverflow com questions 19821026 can only iterable python error 但这是关于
  • Pandas 中的数据帧上采样

    给定按月索引的数据帧 我想按天重新索引 上采样 以前按月索引的值现在应除以该月的天数 try tidx m pd date range 2011 01 31 periods 2 freq M tidx d pd date range 201
  • 获取python的itertools循环当前元素

    我知道你可以使用c cycle a b c 使用在元素之间循环c next 但是有办法获取迭代器的当前元素吗 例如如果c next 回 c 这意味着迭代器位于 b 前 有什么方法可以让我得到 b 不使用next 迭代器 生成器没有任何方法来
  • XSD 验证 xs:date 和 xs:dateTime 的错误格式

    当我设置year如下所示的部分 20512 或类似的内容 XSD 仍然验证 XML 任何想法 这是一个缺陷还是我必须使用简单类型与给定的模式 Thanks XSD
  • 在 Yii 中,有没有办法使用 CActiveForm 验证表格输入?

    情况 我使用了 Yii 网站上的 wiki 文章 收集表格输入 http www yiiframework com doc guide 1 1 en form table 以如下为例 我不认为我需要针对多个模型验证传统意义上的表格输入 我只
  • 与静态库的链接不等于与其对象的链接

    Problem 与静态库链接时生成的固件映像与与直接从静态库中提取的对象链接时生成的固件映像不同 两个固件映像都没有错误地链接并成功加载到微控制器上 后一个二进制文件 与对象链接 按预期成功执行 而前一个二进制文件 链接到静态库 则不然 编
  • URLWithString:返回 nil

    这可能很容易 但我似乎不明白为什么URLWithString 在这里返回零 localisationName is a arbitrary string here NSString webName localisationName stri
  • jquery隐藏预加载[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 这是我的页面http equipe94 com 2009e html http equipe94 com 2009e h
  • 为什么这个任务提前返回?我做错了什么吗?

    我正在尝试设置一群具有最小耦合的工作人员 但我想使用 C async和任务 并非所有任务都是纯异步的 有些任务是完全同步的 这样做的动机是我想创建一些执行业务逻辑的简单方法 并使用System Threading Tasks TaskAPI
  • 检测 Mac OS X 上的调试器

    我试图检测我的进程是否正在调试器中运行 在 Windows 中有很多解决方案 在 Linux 中我使用 ptrace PTRACE ME 0 0 0 并检查其返回值 我没有设法在 Mac OS X 上执行相同的基本检查 我尝试使用 ptra