Inline

 

This transformation replaces a function call with the body of the function. Here is an example script:

tigress  --Seed=0 --Statistics=0 --Verbosity=0 --Environment=x86_64:Darwin:Clang:5.1  \
         --Transform=InitEntropy --Functions=main --InitEntropyKinds=vars \
         --Transform=InitOpaque --Functions=main --InitOpaqueStructs=list \
         --Transform=Inline \
            --Functions=foo,bar \
            --InlineKeepFunctions=bar \
            test1.c --out=obf.c 

Recursive functions and functions with variable number of arguments cannot be inlined.

Options

OptionArgumentsDescription
--Transform Inline Replace the functions calls with the body of the function. Delete the functions after done inlining.
--InlineKeepFunctions String,String,... Do not delete these functions after inlining. Default=NONE.
--InlineDumpCallGraph BOOLSPEC Save the callgraph as a .dot file. Default=False.
--InlineOptimizeKinds constProp, copyProp, mergeLocals, gotos List of optimizing transformations to apply Default=NONE.
  • constProp = Constant Propagation, i.e. replace a variable with its value, if it is constant.
  • copyProp = Copy Propagation, i.e. after the assignment x=y replaces uses of variable x with y.
  • mergeLocals = Reduce the number of local variables by merging locals that are not live at the same time. Particularly useful after inlining.
  • gotos = Remove extra labels and gotos that were inserted during the inlining process.