Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我只是无法理解调试器和探测工具的想法。
从技术上讲,如何在运行的内核模块或用户空间应用程序中插入调试 printk 语句——使用 Kprobe 和 Uprobe。使用什么术语来定义 Kprobe 和 Uprobe 在内存方面的行为 - 如何在程序运行状态下拉伸地址空间。
通常有单字节指令会导致断点(软件中断),然后处理器中也有一些调试寄存器。
有了这些,就可以在内存中的任何地方插入一个跳转到内核陷阱处理程序的陷阱,而无需扩展任何“内存空间”——您只需设置调试寄存器或用该陷阱指令替换断点处的所需指令。
在内核陷阱处理程序中,内核将知道发生故障的确切地址,从而检查寄存器的状态等等。如果出现单字节指令左右的陷阱,您可以将陷阱指令替换为原始指令;可能使用处理器技巧来单步执行它;然后再次用陷阱指令替换......