在Mac上安装gdb
公司为新员工每周安排了一节ETP课程,这周在上安全编码,课上一些实践内容在gdb调试下有助于理解,但发现Mac使用gdb似乎不是那么简单,特此记录以下大致流程.
- 通过homebrew安装gdb
brew install gdb
本以为这样就可以用了,gdb之后发现,Mac下需要对gdb进行签名.于是有了后面的流程. 打开Keychain Access, 在Menu中选择Certificate AssistantCreate -> a Certificate,在打开的窗口中创建证书.
为证书命名,我使用了gdbcert
,这个随意.下面的窗口分别选择Identity Type:Self Signed Root
Certificate Type:Code Signing
勾选Let me override defaults checkbox之后一路Continue,直到Specify a Location For The Certificate页面,在下拉菜单中选择System.这里可能会报错
Certificate Error: Unknown Error =-2,147,414,007
如果这样,不选择System,选择Location,创建后把证书导入到System内.- 完成后,在System里找到证书,双击,展开Trust列表,把Code Signing设置为
Always Trust
- 在终端内输入
killall taskgated
- 对gdb签名
codesign -fs gdbcert /usr/local/bin/gdb
, 记得将名称更换为第二步设置的名称 - 网上不少教程到这里就结束了,但我到这里后,进入gdb进行run,发现仍然报错:please check gdb is codesigned see taskgated(8)
需要加一步操作,编写一个gdb.xml文件,随后重新签名codesign --entitlements gdb.xml -fs gdbcert /usr/local/bin/gdb
.All Done.
gdb.xml文件内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
<key>com.apple.security.get-task-allow</key>
<true/>
</dict>
</plist>
最后
使用过程中发现在gdb里,不能使用类似于run < test.txt
的命令从文件流中读入内容,求指导,不过估计从这里是求不到的了,-.-
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gareth Ng!
评论