首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用编程方法来拦截在linux上运行的进程中调用的系统调用?

如何使用编程方法来拦截在linux上运行的进程中调用的系统调用?
EN

Stack Overflow用户
提问于 2011-07-28 16:24:31
回答 2查看 719关注 0票数 0
  1. 如何通过外部进程完成它?比如说,进程A想知道进程B中的系统调用是什么?比如strace?
  2. ,如何打印出在进程本身中调用的系统调用?比如注册一些事件?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-07-28 16:59:07

  1. 用ps或其他方式检查进程id。然后运行"strace -p -p“可以检查strace是如何执行的,源代码是可用的,或者您可以在程序中调用strace .
票数 1
EN

Stack Overflow用户

发布于 2011-07-28 17:26:12

如果只涉及特定的系统调用(并非全部),则可以重写C存根函数并将其放在共享库中,并通过设置LD_PRELOAD在执行目标应用程序之前预加载库。

这导致在动态链接器解析函数调用时,您的函数比C库提供的函数更受欢迎。

这只适用于动态链接的应用程序(几乎所有),并且您需要与所使用的C库兼容。由于几乎所有linux都使用glibc,而且不同的glibc版本都是二进制兼容的,所以这不应该是一个问题。

你可以看看fakeroot (作为一个例子)如何做它。

添加:您也可以将调用转发到C库中的实际实现,而不是重新实现整个系统调用包装器。我假设您需要手动加载库并解析地址(对此不确定,但否则您可能会自行调用)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6862320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档