首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用动态加载重写C++函数

问使用动态加载重写C++函数
EN

Stack Overflow用户
提问于 2011-02-02 21:16:38
回答 4查看 1K关注 0票数 1

我有一个程序A,在这个程序中实现了Foo函数。程序A能够在运行时动态加载动态链接库。

我目前正在编写程序B,它被编译成dll,所以程序A能够加载它。

我想做的是,以某种方式“覆盖”程序B中的Foo函数,所以当从程序A调用它时,会调用与程序A中实现的代码不同的代码。

我找到了一些关于trampuline函数的参考主题:http://en.wikipedia.org/wiki/Trampoline_%28computers%29

我的问题是,这是可能的吗?多么?

谢谢,krisy

编辑:我有程序A的源码,但不允许修改。所以重新定义程序A的结构是不可能的:-(

编辑:我需要一个-最好是-开源,跨平台的解决方案(或者至少需要在linux系统下工作)

EN

回答 4

Stack Overflow用户

发布于 2011-02-02 21:43:05

只有当您想要覆盖的函数位于程序A和B通用的外部dll中时,这才是可能的。

在程序A中实现该函数并在程序B的DLL中重新定义它将不起作用,因为该函数已经定义。动态链接器将只重新绑定未定义的函数。

任何解决方案都会是一种黑客手段。

最好使用函数指针或适当的类设计,并创建一个以干净的方式解决问题的体系结构。

票数 1
EN

Stack Overflow用户

发布于 2011-02-02 21:29:47

你可以使用Detours来做这件事。

编辑:LD_PRELOAD可能会帮你做同样的事情。(取自What is the LD_PRELOAD trick?的例子)

代码语言:javascript
复制
$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls
票数 0
EN

Stack Overflow用户

发布于 2011-02-02 21:40:26

另一种简单的方法是使用函数指针,模块A将要求B获取函数指针并调用它。

这项技术主要用在C中来模拟多态性,但是如果你使用C++,我建议你使用继承;

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

https://stackoverflow.com/questions/4874884

复制
相关文章

相似问题

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