我需要在我的C程序中使用简单的ELF文件。 我不能使用任何外部库,但我可以使用elf.h
。使用ELF文件
让我们hello.o文件来源:
int Hello() { return 3; }
我怎么能访问Hello
仅仅具有hello.o
文件ohter C程序?
我应该加载它到内存使用mmap
或者像这样。最后,我需要处理非常复杂的ELF文件,但现在我不知道该如何开始。
更新: 我需要按照我描述的方式这样做,因为它是用于学习的目的。 整个问题比我描述的更复杂。
对于这个问题,假设我需要编写方法:
int HelloFromElfO(const char* helloFile);
这将执行在helloFile
实施Hello
功能。
我不想要完整答案。我不需要任何代码。我需要一些东西来开始。
我有关于ELF文件结构的基本知识,但我不知道如何在二进制文件中使用C语言工作而没有任何解析器或者像这样。
UPDATE2: 好的,像readelf这样的应用程序是很很复杂。所以,也许我尝试这种方式:让我再说我有hello.o
映射到ptr
内存。我如何获得指向Hello
函数的指针?
如何从hello.o
获取任何结构化数据?我的意思是,不是纯字节,而是我可以使用的东西。
你没有选择简单地把它们变成共享对象,并依靠动态加载器? – NPE 2013-03-23 12:01:20
@npe这是学术问题。我需要这样做。 – Ari 2013-03-23 12:33:04
尝试查看'readelf'命令及其源代码,它应该显示如何从.o文件中提取所需的信息。也许你也可以看一下'dlsym'源代码,因为它可以做你想做的事情,但是在C库中。 – teppic 2013-03-23 13:00:33