gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:50 27 4
gpt4 key购买 nike

一个程序通常依赖于多个库,有时也可能依赖于其他程序。我查看 Wine 之类的项目,并思考它们如何弄清楚程序正在调用什么?

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

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

最佳答案

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

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

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

查找 LD_PRELOAD 以获取更多信息。

关于c++ - 在运行时捕获来自程序的调用并将它们映射到其他调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4464431/

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