File Merge

Tigress is a whole-program transformer. Essentially, this means that Tigress accepts a single C file as input. This is so that we can do whole-program analysis and transformations. For example, the EncodeData transformation has to perform a whole program alias analysis to avoid generating the wrong code, and the Inline transformation -- of course -- needs the code of a function in order to expand it inline.

You can still give Tigress multiple C files as input. This just means that -- before Tigress applies any obfuscating transformations -- it starts by merging all the C files together. This also includes all the .h-files that your program depends on, including all the system .h files:

Sometimes it can be helpful to do the merge step prior to obfuscating. You simply call Tigress with the --Merge  option and the merged file will be saved. You can then pass it back into Tigress to be obfuscated:

Earlier versions of Tigress (prior to Version 4) had a separate merge program, called tigress-merge. This is no longe needed:

For more complex merging scenarios, see the CIL information page about merging.