#dwarf #architecture

app thorin

一个调试器

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2019年4月4日

#54#dwarf

MIT 许可证

85KB
2K SLoC

C 1.5K SLoC // 0.1% comments Rust 601 SLoC // 0.1% comments

thorin — DWARF 调试器

thorin 是一个类似于 gdb 的简单调试器,它是 Linux 和 MacOS 的 (非常) 小兄弟。目前它仅适用于 C 程序和 x86_64 架构。

thorin 仍在开发中 -- 请参阅 TODO 部分。

安装

获取 Rust

cargo install thorin

使用

thorin <target-program>

thorin 将启动目标程序并等待异常,如段错误。

如果程序成功退出,则不会发生任何操作。

如果程序引发异常,thorin 将暂停它并捕获其状态。您可以通过 thorin 控制台检查程序的状态

thorin> help
Commands:
  (print|show|get) <variable-name>:  Print the value of a variable.
  read <address> <count> <type>:     Read the value at <address>. <type>
                                     is the type of the value, <count> is the
                                     number of values to read.
  help:                              Print this help message.
  (exit|quit):                       Quit thorin.

为了访问变量和其他源代码级别的信息,thorin 需要能够读取程序对象文件中的调试信息。为此,您只需使用 -g 标志编译您的 C 程序即可。

cc -g [other flags] myprogram.c

目前,您可能需要在 MacOS 上以 root 权限调用 thorin。我最终会找出如何让 Rust 二进制文件的代码签名生效。

为什么会有这个存在?

没有真正的理由要在 thorin 和 gdb、lldb 或其他更强大的调试器之间选择 thorin。我写这个是因为

  1. 我想学习 Rust。
  2. 这是一次有趣的系统编程练习。

我选择“thorin”这个名字是因为这个程序读取 DWARF 文件(调试信息的常用格式)。

TODO

  • 修复 CLI
  • 传递参数并更改目标进程的 stdin/stdout
  • 通用错误修复和 QOL 改进
  • MacOS 代码签名

作者

依赖关系

~6MB
~113K SLoC