gpt4 book ai didi

c - 这是拦截系统调用的好方法吗?

转载 作者:IT王子 更新时间:2023-10-28 23:55:34 24 4
gpt4 key购买 nike

我正在写一个工具。该工具的一部分是能够记录系统调用的参数。好吧,我可以为此目的使用 ptrace,但是 ptrace 非常慢。我想到的一个更快的方法是修改 glibc。但这变得越来越困难,因为 gcc 神奇地插入了自己的内置函数作为系统调用包装器,而不是使用 glibc 中定义的代码。使用 -fno-builtin 也无济于事。

所以我想到了编写一个共享库的想法,其中包括每个系统调用包装器,例如mmap,然后在调用实际的系统调用包装器函数之前执行日志记录。例如,下面给出了我的 mmap 的伪代码。

int mmap(...)
{
log_parameters(...);
call_original_mmap(...);
...
}

然后我可以使用 LD_PRELOAD 首先加载这个库。您认为这个想法行得通吗,还是我遗漏了什么?

最佳答案

您在用户空间中想出的任何方法都无法与任何应用程序无缝协作。对你来说幸运的是,已经支持在内核中做你想做的事情。 Kprobes 和 Kretprobes 允许您检查机器在系统调用之前和之后的状态。

此处的文档:https://www.kernel.org/doc/Documentation/kprobes.txt

关于c - 这是拦截系统调用的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10688707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com