debugging 共享库中的断点是否会导致所有应用程序在该断点处中断

zpqajqem  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(132)

以Linux为例,一个新的应用程序正在使用一个共享/动态.so库。
在调试应用程序时,如果我们能够在该共享库中设置断点,那么同时使用该共享库的任何其他应用程序是否会受到影响?

mzillmmw

mzillmmw1#

通常,进程的文本段(包括可执行文件和共享库中的所有代码以及常量数据)标记为只读。调试时,调试器将代码页标记为写入时复制。修改代码以设置断点时,这会导致进程获取代码的私有副本,因此断点不会影响其他进程。
我发现很多网页和其他SO答案都解释了断点是通过用INT 3替换指令来实现的(在x86硬件上),但是没有一个提到进程得到代码的私有副本。但是它肯定是这样工作的,因为对于运行相同程序或使用相同共享库的其他进程来说,从断点获取中断是没有意义的,它们没有运行调试器来处理这些中断,并且被INT 3替换的指令位于调试器的内存中。

相关问题