阅读thesequestions后,我正在查找有关如何控制符号解析顺序的更多详细信息。在不同的动态加载对象中以不同方式解析符号
在我的问题中,我有主要可执行文件exec
。 exec
动态链接到a.so
和c.so
。 a.so
动态链接到b.so
。 b.so
调用函数foo
,通常由c.so
提供,但在这种情况下也由exec
提供。 b.so
只适用于c.so
的foo
的实施。
的情况的图:
exec (foo caller and provider)
| \
a.so |
| |
b.so | (foo caller)
|/
c.so (foo provider)
我只能控制的a.so
编译/源,并且我链接a.so
到exec
与LD_PRELOAD
。
我想呼吁在exec
foo
解决到exec
“在b.so
的实现,并呼吁决心c.so
的实现。这种类型的东西在不同的对象中具有不同的符号查找可能吗?
我怎样才能用''dlsym''来做到这一点?我看到''a.so''怎么可以用''dlsym''来引用''c.so'''foo'',但是有没有办法使用''dlsym''来制作' 'b.so''使用它? –
对不起,误解了这个问题。我已经更新了答案,希望现在更有帮助。 – yugr
感谢您的编辑!然而,所有的依赖关系只在图中向下(''a.so''只能调用到''b。所以''),这意味着'__builtin_return_address'技巧将无法工作。另外,它实际上是在''exec''和''c.so''中''foo'的单独实现。 GOT黑客攻击中是否有任何资源(这不是我想去的道路,但是我想了解的东西)? –