当前位置:  开发笔记 > 编程语言 > 正文

拦截C调用并将其转发给第三方库

如何解决《拦截C调用并将其转发给第三方库》经验,为你挑选了1个好方法。

我有一个调用第三方共享库(C)的应用程序(A)。我想编写一个自己的(B)库,以拦截从A到C的调用,在某些情况下用我自己的代码替换这些调用,在某些情况下进行一些额外的处理,然后在C中调用匹配函数,然后在在某些情况下,只需将调用直接转发给C。

该应用程序是开源的,因此我可以更改每个调用站点,以在B中调用一个类似名称的函数,然后在需要时调用C中的相应函数,但这将需要很多工作,并且需要合并上游的更改。应用困难。我没有第三方库的源代码。如果它仅是标题,那么我可以使用名称空间来实现此目的,但是当我的库和第三方库似乎都需要定义完全相同的符号时,我不确定如何去实现它。

有什么办法可以使这项工作成功吗?我主要针对OS X,但希望它能在linux上使用,然后在Windows上也能使用。



1> Henrik Carlq..:

您可以使用LD_PRELOAD指向您自己的共享库。使用LD_PRELOAD,将调用共享库中的所有函数,而不是其他库中具有相同名称的函数。

如果要注入代码然后调用原始函数,则需要调用dlsym从第三方库中获取原始函数。

这里有一些示例:https : //rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有