【发布时间】:2013-07-14 06:02:45
【问题描述】:
如果Linux内核或驱动程序中存在缓冲区溢出等内存覆盖代码,则很难调试并找到根本原因。
我知道我可以启用 SLAB 调试来获取一些信息。如果在释放后将某些内容写入slab内存,那么我们将看到警告。但是这种方法有一定的局限性,有时我们仍然无法得到有用的线索。
还有其他内核调试方法可以检测内存覆盖吗?
【问题讨论】:
标签: linux linux-kernel kernel
如果Linux内核或驱动程序中存在缓冲区溢出等内存覆盖代码,则很难调试并找到根本原因。
我知道我可以启用 SLAB 调试来获取一些信息。如果在释放后将某些内容写入slab内存,那么我们将看到警告。但是这种方法有一定的局限性,有时我们仍然无法得到有用的线索。
还有其他内核调试方法可以检测内存覆盖吗?
【问题讨论】:
标签: linux linux-kernel kernel
看看Kmemcheck tool。您可以在内核配置中启用它并重建内核。
Kmemcheck 可能会显着降低系统速度,但它可以检测到不正确的内存访问,否则很难找到。
对于 x86_64 架构上的内核 4.1 或更新版本,Kernel Address sanitizer (KASan) 也可能是一个选项。它应该比 Kmemcheck 快得多。
【讨论】: