views:

106

answers:

1

Hello,

I'm currently looking for a way to add data to an already compiled ELF executable, i.e. embedding a file into the executable without recompiling it.

I could easily do that by using cat myexe mydata > myexe_with_mydata, but I couldn't access the data from the executable because I don't know the size of the original executable.

Does anyone have an idea of how I could implement this ? I thought of adding a section to the executable or using a special marker (0xBADBEEFC0FFEE for example) to detect the beginning of the data in the executable, but I do not know if there is a more beautiful way to do it.

Thanks in advance.

+2  A: 

You could add the file to the elf file as a special section with objcopy(1):

objcopy --addsection sname=file oldelf newelf

will add the file to oldelf and write the results to newelf (oldelf won't be modified) You can then use libbfd to read the elf file and extract the section by name, or just roll your own code that reads the section table and finds you section. Make sure to use a section name that doesn't collide with anything the system is expecting -- as long as your name doesn't start with a ., you should be fine.

Chris Dodd
I did not know objcopy could do that ! Thanks.
Pierre Bourdon