在运行时捕获来自程序的调用并将它们映射到其他调用

时间:2010-12-16 19:05:13

标签: c++ c linux theory

程序通常依赖于几个库,有时也可能依赖于其他程序。我看看像Wine这样的项目,并想一想他们如何弄清楚程序正在调用什么?

在Linux环境中,有哪些方法可以了解可执行文件在运行时调用什么以捕获并将它们映射到其他调用?

非常感谢任何代码片段或对资源的引用以进行额外阅读:)

1 个答案:

答案 0 :(得分:1)

在Linux上,您正在寻找LD_PRELOAD环境变量。这将在程序请求之前加载您的库。如果您提供的函数定义与目标程序加载的函数定义匹配,那么将调用您的版本。

但是你无法真正检测出程序正在调用的函数。但是,您可以在共享库中获取所有功能并实现所有这些功能。你并不是真的捕捉这些功能,你只是重新实现它们。

像Wine这样的项目在某些情况下会这样做,但并非全部。他们还重写了一些动态库。因此,当Win32加载一些DLL时,它实际上是加载Wine版本而不是本机版本。这与使用您自己的函数替换函数的概念基本相同。

查找LD_PRELOAD以获取更多信息。