#1 楼
坦率地说,这不是RCE,而是开发(即StackOverflow)问题,但让我给出您可以根据问题中提供的信息水平提供的建议。您要实现的是通过所有方法通过单个库提供这些符号,或者您是否不在乎如何将两组符号都提供给您的程序。在库上,您可以简单地编写一个共享库,并通过浅层包装函数从中导出符号,但是使用动态加载程序从原始共享库中找到它们(请参阅
ldd
和相关手册页)。用readelf --dyn-syms <elf-file>
/ readelf --syms --use-dynamic <elf-file>
(在Ubuntu / Debian上的软件包是elfutils
)找到所有符号名称并不是很难。从输出的结果中,您可以编写一个用于链接程序的版本脚本(例如gcc -Wl,--version-script,script.map ...
)。但是,假设您使用的是默认Linux功能且没有任何其他魔术,则也可以滥用
ld-linux
/ ld.so
定位符号的方法。如果编写设置LD_PRELOAD
的简单包装器外壳脚本,则可以简单地预先加载两个共享对象,并且在正常情况下,它们应优先于其他符号。我也强烈建议您阅读Michael Kerrisks优秀著作“ Linux和Unix系统编程权威指南”的第41章和第42章,俗称TLPI。在您的情况下,相应的源样本也可能派上用场。
评论
我假设您没有这些库的源代码(只是为了使事情更清楚!)。但是,您可以访问它的静态版本(* .a)吗?不,我既没有源代码,也没有静态版本。