我是eBPF的新手,我知道eBPF是事件驱动的,这意味着在注册钩点之后,钩子函数将在发生这种事件时被执行。所以我想知道程序怎么能跳到钩子函数?
发布于 2022-06-09 21:03:43
(很好的答案:)作为对重新探测的补充:就像前面说过的那样,它们也可以用int3 (在x86上)代替指令;用gdb来观察是很好的。但是,它们在函数开始时就这样做了;调用的蹦床替换了返回地址。您可以很容易地在一个小的测试程序中看到这一点,它会打印带有或不使用重探针的堆栈。您会注意到堆栈无法正确读取(至少由backtrace(...)读取)。
通常情况下,复测会很好。但是,请记住,它们篡改堆栈(以一种意外的方式)。至少在使用g++时,当被探测的被调用方引发在调用方中处理的异常时,它们会中断异常处理。
https://stackoverflow.com/questions/72507777
复制相似问题