c - 从内存中加载 .so 文件

标签 c linux shared-objects

<分区>

Possible Duplicate:
dlopen from memory?

我在 Windows 的 DLL 文件中看到过这个,从内存缓冲区加载,但我在 Linux 的任何地方都找不到它,“ld”源代码是我见过的最复杂的代码。所以:

有没有从内存中加载.so文件的例子?即使是我能完成的简单的?我只是不知道从哪里开始,尽管我已经阅读了大部分 ELF 规范,但它对我来说仍然很神秘。

最佳答案

您正在查看错误事物的源代码:ld 不执行程序和库加载。相反,您应该查看 libc 中的 dlopendlsym 函数的源代码。另外,你应该看看dynamic链接器的来源:ld-linux.so(真实名称因平台而异;执行ldd/bin/ls找出动态链接器所在的位置)。

ELF 解析并不难,但需要注意细节并理解特定 CPU 的汇编代码;你还需要你的平台的 ABI 规范(32 位和 64 位 linux 不同,CPU 之间也不同。)

如果你只需要在运行时从内存中加载目标文件(也就是说,它不一定是 SO),你可以看看 X11 项目:他们已经实现了一个模块基本上是在某个地址加载目标代码并重新定位它的系统。

关于c - 从内存中加载 .so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016254/

相关文章:

c - C 编程中如何调用变量指定 printf 的格式

linux - 使用 dlopen 在 armhf 系统上加载 arm 共享对象

gdb - 为什么 gdb 拒绝加载我的共享对象以及验证操作是什么

c - 使用 open() 只读和只写

用 FLOAT 更改 INT

c++ - 在 intel intrinsics (AVX) 中使用混合指令

linux - 如何使用终端打开 "-"虚线文件名?

c - 使用popen在C中使用两个可执行文件进行读写

linux - 无法在 Linux 上启用 ICU 库支持

python - 如何从可从 Python 使用的 C 或 C++ 代码创建 make .so 文件