我需要在我的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