Search code examples
macoslinkermach-o

How do I embed data into a Mac OS X mach-o binary file's TEXT Section?


I have a Mac OS X command-line tool that would benefit from having some data embedded in the binary file itself.

I know mach-o files support multiple segments, some of which can be used for storing arbitrary data. But I can't find a command-line tool to do that.

While I know there are other, probably simpler ways (e.g. convert the data file into C source code and have it get linked in by gcc) to get the data into my binary this problem has piqued my interest. Anyone know the magic?


Solution

  • The linker, ld, takes an argument -sectcreate.

    From the man page,

     -sectcreate segname sectname file
                 The section sectname in the segment segname is created from
                 the contents of file file. The combination of segname and 
                 sectname must be unique  there cannot already be a 
                 section (segname,sectname) from any other input.
    

    GCC also has a section attribute that can be applied to a variable to say that it belongs in a non-standard section.