Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 579
David X Avatar asked Sep 01 '10 06:09

David X


1 Answers

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.

like image 156
Greg Hewgill Avatar answered Sep 19 '22 13:09

Greg Hewgill