Igor’s tip of the week #82: Decompiler options: pseudocode formatting

The default output of the Hex-Rays decompiler tries to strike a balance between conciseness and readability. However, everyone has different preferences so it offers a few options to control the layout and formatting of the pseudocode.

Accessing the options

Because of its origins as a third-party plugin for IDA, the decompiler options are accessible not through IDA’s Options menu, but via Edit > Plugins > Hex-Rays Decompiler, Options button

Pseudocode formatting options

Formatting options are available on the main page of the options dialog.

  • Comment indent: starting position for regular (end-of-line) comments. Obviously, for longer lines the comment will be shifted further to the right. Block comments are aligned to the statement they’re attached to so this setting does not apply to them.
  • Block indent: indentation for nested statements, e.g. inside if statements or for/do/while loop bodies.
  • Right margin: the decompiler tries to keep the pseudocode line length under the specified length. For example, it will try to split a function call with many arguments by putting them on separate lines:

    Note that in some cases you may still see lines longer than the specified margin because it’s not always possible to break a long line so that it remains valid C.
  • Max strlit len: maximum length of a string constant displayed directly (inline) in the pseudocode. A constant longer than this value will be replaced by a name referring to it. 
  • Max commas: how many comma operators the decompiler can use in one expression to make the code more compact. By reducing this value, you should see simpler expressions at the cost of more lines of code: more/deeper nested if statements, extra variables for intermediate results, or even additionalgoto statements.
    For example, here’s a fragment of pseudocode with a comma statement inside the if condition:

    After changing max commas to 1, the comma disappears at the cost of additional if and goto statements:


Changing the defaults

When changing the settings from inside IDA using the UI described above, they apply only to the current database. To change the defaults for all new databases, either edit cfg/hexrays.cfg in IDA’s install directory, or create one in the user directory with the options you want to override.

Related options

Extra empty lines can be added to the pseudocode to improve readability. This feature was described in the tip #43 (Annotating the decompiler output).

More info: Configuration (Hex-Rays Decompiler User Manual)