参考:https://blog.tartanllama.xyz/writing-a-linux-debugger-setup/
上述博客介绍了一些列步骤以及各个步骤的源码,然而道路是曲折的,bug 还是多的(我有充分证据,博客作者并没有验证他的代码,很多处都是错的,需要读者自己找)。
事实上,我很少参考作者放的 git 仓库代码,我仅仅参考了作者的博客中的代码,那已经足够了。
我编写了很系统的 CMakeLists.txt 文件,我认为这样非常有利于清晰地组织和修改。你可以直接克隆这些代码,然后进入 libfin 目录,分别在 dwarf、elf目录中运行 make(这是为了产生动态库),之后在最外层 CMakeLists.txt的目录中:
cmake -B cmake
cmake --build build
cd ./bin
./minidbg stack
直接调试,我已经解决了所有的疑难杂症。
mini debugger 是用 C++写的,事实上,你可以用任何能调用 libelfin、lineniose 的库的语言(C)都可以实现,这里面牵扯到的知识尤其是关于ELF、DWARF等,和 C++没有任何关系,C++只是一个载体, 如果练习 C++ 编程,这绝对不是最合适的。
如果你对一下不熟悉,我建议你认真学习这个项目,通过这个项目可以学到:
- CMakeList.txt 的编写
- 动态库、静态库的链接(基于 cmake?)
- OS 对程序的加载与运行
- stack frame 的组织方式等等
- 当然了,debugger 的原理!!!