Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating ELF binaries without using libelf or other libraries

Recently I tried to write a simple compiler on the linux platform by myself.

When it comes to the backend of the compiler, I decided to generate ELF-formatted binaries without using a third-party library, such as libelf.

Instead I want to try to write machine code directly into the file coresponding to the ELF ABI just by using the write() function and controlling all details of the ELF file.

The advantage of this approach is that I can control everything for my compiler.

But I am hesitating. Is that way feasible, considering how detailed the ELF ABI is?

I hope for any suggestions and pointers to good available resources available.

like image 624
bluesea Avatar asked May 21 '12 04:05

bluesea


1 Answers

How easy/feasible this is depends on what features you want to support. If you want to use dynamic linking, you have to deal with the symbol table, relocations, etc. And of course if you want to be able to link with existing libraries, even static ones, you'll have to support whatever they need. But if your goal is just to make standalone static ELF binaries, it's really very easy. All you need is a main ELF header (100% boilerplate) and 2 PT_LOAD program headers: one to load your program's code segment, the other to load its data segment. In theory they could be combined, but security-hardened kernels do not allow a given page to be both writable and executable, so it would be smart to separate them.

Some suggested reading:

http://www.linuxjournal.com/article/1059

like image 133
R.. GitHub STOP HELPING ICE Avatar answered Nov 11 '22 22:11

R.. GitHub STOP HELPING ICE