Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有两个共享库。A lib 使用dlopen.
dlopen
它们实现了相同的 API 集。
我的客户端在同一系统上运行,当它尝试访问它要加载的库的 API 时?
或者这是一件无效的事情?我必须使 B 成为静态库。
我的目标是让客户端只能访问 lib A。
您是否可以控制客户端(即,您可以重新编译它)?如果是这样,您可以在链接时指定库 A;那么这将是 A 对dlopenB的关心。
如果您试图劫持fooB 中的函数调用,那么您的客户端正在尝试加载库 B。您可以使用LD_PRELOAD它来强制它加载库 A。然后客户端将发出一个调用foo(),A 将应答它,A 将能够foo()@B在修改、更改和/或记录输入值和返回值之后将调用路由到。
foo
LD_PRELOAD
foo()
foo()@B
你打电话给你的客户,LD_PRELOAD=B.so ./client而不是./client。
LD_PRELOAD=B.so ./client
./client