kil*_*ode 5 c linux shared-objects
可能重复:
从内存中删除?
我已经看到这个用于Windows的DLL文件,从内存缓冲区加载,但我无法在Linux的任何地方找到它,而"ld"源代码是我见过的最复杂的代码.所以:
有没有从内存中加载.so文件的例子?即便是一个我能完成的简单的?我只是不知道从哪里开始,即使我已经阅读了大部分的ELF规格,但它对我来说仍然是神秘的.
你正在查看错误的源代码:ld不执行程序和库加载.相反,您应该查看libc 中的源代码dlopen和dlsym函数.此外,您应该查看动态链接器的来源:ld-linux.so(真实名称随平台而变;执行ldd /bin/ls以找出动态链接器所在的位置).
ELF解析并不困难,但需要注意细节和对特定CPU的汇编代码的理解; 您还需要适用于您平台的ABI规范(对于32位和64位Linux,它也有所不同,并且CPU之间也有所不同.)
如果你只需要加载对象文件在运行时从内存中(即,它并没有成为一个SO),你可以看看X11的项目:他们已经实施的模块系统,基本上,负载在一些目标代码解决并重新安置它.