Mac Catalina 下 gdb codesign问题解决
在 macOS 上,无法直接使用 gdb 进行 debug。
这是因为 Darwin 内核在你没有特殊权限的情况下,不允许调试其它进程。调试某个进程,意味着你对这个进程有完全的控制权限,所以为了防止被恶意利用,它是默认禁止的。允许 gdb 控制其它进程最好的方法就是用系统信任的证书对它进行签名。
但是目前我所使用的 macOS 版本是 macOS Cataline,在网上大多数方案中都缺少某些步骤,最终才能运行,这里作出说明。
@
传统步骤
创建证书
按入下步骤创建代码签名的证书:
打开 Keychain Access 应用程序(/Applications/Utilities/Keychain Access.app)
执行菜单 钥匙串访问 -> 证书助理 -> 创建证书
填写如下信息:
名称:gdb_codesign
身份类型:自签名根证书
证书类型:代码签名
钩选:让我覆盖这些默认设置
一路确定,直到指定证书位置的步骤,选择系统
点击“创建”,会提示用输入系统登录密码,创建完成
在钥匙串访问程序中,选择左侧栏的系统和我的证书,找到你刚刚创建的gdb_codesign证书并双击打开证书信息窗口,展开信任项,设置使用此证书时:为始终信任。
关闭证书信息窗口,系统会再次要求输入系统登录密码。
对 gdb 签名
执行下面的命令:
codesign -s gdb_codesign gdb
执行上面的命令时,系统会再次验证身份。
完成后一定要重启系统,这个很重要,否则签名不会生效。
如果出现下面的错误:
MacBook:~ sam$ codesign -s gdb_codesign gdb
gdb: No such file or directory
那么就指定 gdb 的全路径。
新版系统需要做出的变化
如果是之前的系统,直接执行:
codesign -fs gdb-cert $(which gdb)
如果是 Mojave (10.14) 之后的系统,
先创建一个文件 gdb-entitlement.xml,内容为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.debugger</key>
<true/>
</dict>
</plist>
</pre>
再执行:
codesign --entitlements gdb-entitlement.xml -fs gdb-cert $(which gdb)
希望能帮到大家。
Mac Catalina 下 gdb codesign问题解决的更多相关文章
- Mac os系统gdb调试器的安装与使用
Mac os系统gdb调试器的安装与使用 1.简介 Mac os下的Terminal 终端中默认情况下并没有安装gdb调试器,但是可以通过gcc编译器进行代码编译,如果出错了就需要通过gdb调试器进行 ...
- Mac系统下React Native环境搭建
这里记录一下在Mac系统下搭建React Native开发环境的过程: 1. 安装HomeBrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.g ...
- Xamarin Studio在Mac环境下的配置和Xamarin.iOS常用控件的示例
看过好多帖子都是Win环境装XS,Mac只是个模拟器,讲解在Mac环境下如何配置Xamarin Studio很少,也是一点点找资料,东拼西凑才把Xamarin Studio装在Mac上跑起来,如下: ...
- mac os 下搭建android开发环境
mac os 下搭建android开发环境 周银辉 mac os 下搭建android环境比较方便, 如下几个步骤: 1,安装jdk 先搞清楚自己是否已经安装,在命令行下:java -version, ...
- mac os 下的sublime --- 快捷键
mac os 下的sublime ---列模式 http://www.oschina.net/question/249672_161413 触控板也可以的:左手同时按住 Option 和触控板左下角 ...
- Mac环境下svn的使用
在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...
- Mac os下换行符导致发布到npm里的命令行模块不能使用问题
学习node,弄一个命令行模块,发布到npm后,Windows安装后可以使用,但Mac 终端下则不行.对比grunt-cli搞了一夜,甚是郁闷,最后发现竟然是操作系统的换行符问题. npm insta ...
- Mac OSX下卸载Nodejs
有时手贱看到新版本就升级,升级后发现一堆模块不能用了,心情好慢慢调,但也有调不好的时候,只能卸载重装低版本的node了. 我的机器环境如下 1. Mac OSX 10.10.3 2. node为0.1 ...
- MAC系统下,删除.svn文件
MAC系统下,.svn文件是隐藏的. 如果项目是非export导出的,那么项目中会有很多的.svn文件. 如果项目的体积非常庞大,我们如何快速的批量删除.svn文件呢?下面是操作方法: 打开终端,cd ...
随机推荐
- Next Cloud通过修改数据库表,达到替换文件而不改变分享的链接地址的效果,以及自定义分享链接地址
Next Cloud如何通过修改数据库表,达到替换文件而不改变分享的链接地址的效果,以及自定义分享的链接地址 本文首发于我的个人博客:https://chens.life/nextcloud-chan ...
- 实用教程!SPSSAU验证性因子分析思路总结
验证性因子分析,是用于测量因子与测量项(量表题项)之间的对应关系是否与研究者预测保持一致的一种研究方法.尽管因子分析适合任何学科使用,但以社会科学居多. 目前有很多软件都可以非常便利地实现验证性因子分 ...
- (转载)std::enable_if 的几种用法 c++11
今天看confluo源码中看到了std::enable_if这一个我不了解的语法,所以记录下来 转载地址:https://yixinglu.gitlab.io/enable_if.html std:: ...
- JS - 对金额数字实现千分位格式化处理
添加千分位处理: function fmoney(s, n) { n = n > 0 && n < = 20 ? n : 2; s = parseFloat((s + &q ...
- source insight4工具栏还原
source insight4工具栏不小心动了一下,位置全变了,强迫症犯了. 还原步骤. 1.关闭SI4 2.备份 C:\Users\用户名\Documents\Source Insight 4.0\ ...
- CefSharp如何判断页面是否加载完
问题:CefSharp如何判断页面是否加载完毕. 摘要:相信C#用CefSharp做浏览器来发的应该有很多人都会有遇到这个问题.特别是要执行JavaScript的时候,涉及到跨页面的JavaScrip ...
- 加载PHP的配置扩展文件
一.在PHP的安装目录中去创建一个 php.ini 的配置文件 复制php.ini-development文件,修改成php.ini文件(注意:不要多加一个空格或标点什么的).其中 php.ini ...
- 【MarkDown】github readme添加图片 Markdown语法添加图片,适用各种markdown语法
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一 ...
- 攻防世界——Misc新手练习区解题总结<2>(5-8题)
第五题gif: 下载附件后,解压得到这样一个文件 几经寻找无果后,发现是不是可以将gif中的黑白图片看做二进制的数字,进而进行解密 最后用二进制转文本得到flag 第六题掀桌子: 看起来是16进制的密 ...
- C# Chart各个属性详细解析、应用
Chart笔记 前台页面代码: <form id="form1" runat="server"> <div> <asp:Chart ...