How to make gcc generate only machine code that can be loaded directly into memory and executed?

David X picture David X · Sep 1, 2010 · Viewed 7.8k times · Source

I would like to produce a file that I can load into memory (for example with mmap) and then jump to the start of that memory to run the code.

Ideally, I'd like the option of either making the code relocatable (which might be inefficient) or specifying an explicit address that the code expects to be loaded at (which is a pain), but either one would probably work fine on its own.

Answer

Greg Hewgill picture Greg Hewgill · Sep 1, 2010

You can do this but you will need to go through the object file format. In particular, the objcopy command can transform an executable file to a "flat" binary file (depending on your target platform). Perhaps something like this:

gcc -o test test.c
objcopy -O binary test test.bin

See man objcopy on your platform for more details.