kretprobe 和 fexit

kretprobe 孬,跟朋友简单讨论了相关主题,发现 fexit 高尚。

fexit 的把戏在 2020 年中那段走火入魔的时间玩过不少,没想到就是 fexit 的标准,看来多数人觉得正确的思路它就是正确的。

kretprobe 每次调用函数都要执行复杂的带锁操作,这种典型的 Linux kernel 令人不快,解释 fexit 之前,先看另一种不同于 kretprobe 的非 Linux kernel 风格的 return probe 把戏:
kretprobe 和 fexit_第1张图片
箭头指示执行顺序,一气呵成,不涉及内核数据结构锁操作,比 kretprobe 高尚,在 register 时即可将 int3 handler 和 asm_stub 摆置到位,但 int3 的开销也不小,且比 Linux kernel 的锁风格更非标。

如果 function 的开头是 nop5,它支持 5 字节替换,将 nop5 替换为 call stub,整个流程即:
kretprobe 和 fexit_第2张图片
同样一气呵成,但没了 int3。只需在 register 时准备好 stub & return handler 并将被 return probe 的函数开头的 nop5 替换成 call stub 即可,运行时几乎没有任何额外开销,这就是 fexit 的原理。

浙江温州皮鞋湿,下雨进水不会胖。

你可能感兴趣的:(linux,运维,服务器)