背景介绍
GDB不仅可以用来调试程序,还可以直接修改被调试程序的二进制文件。这种方式相比于改源码重新编译、gdb attach
有什么优势呢?考虑以下企业生产环境中的几个调试场景:
- 需要修改的二进制文件是其他领域的,你没有源码和编译工程,让相关领域出调试对接件比较费时,但你只想临时改一行别人的代码,几分钟内完成验证。
- 调试环境上,使用gdb attach进程方式有困难:
- 被调试的服务(进程)没有启动断点(可定位性很差),或者gdb手动拉起的方法非常复杂,等服务正常启动后再attach已经赶不上打断点的时机。
- 长时间gdb挂住业务进程导致触发丢心跳复位。
- 你不确定修改的二进制文件同时被几个进程加载,但你诉求很明确,就是直接改文件,对所有进程生效。
以下举一个简单的例子,介绍GDB修改程序二进制文件的技巧: