Skip to content

Component Creation

The Component Creation feature of Sidekick automatically identifies groups of related functions (think compilation units) and arranges them hierarchically, making it easier to understand the binary program's structure.

How it works

Sidekick uses features derived from BinaryNinja's static analysis and consolidates them into a single graph that captures the relationships between functions. The graph is uploaded to the Sidekick service where it is partitioned into components, arranged hierarchically to form a tree. The tree is then displayed in the Symbols sidebar.

Sidekick attempts to name the components based on function names and other symbols it finds. If these features are not present in the binary, the components will be named based on their location in the binary. However, you can always use the Sidekick Suggestions feature to infer more meaningful names.

How to use it

Component Creation applies to the current function or a set of functions depending on which operation is performed. To create a component for the current function, click on the Create Component item in the Plugins/Sidekick menu.

The operation can take a few minutes to complete, depending on the number of functions selected. When it's done, you'll see the components in the Symbols sidebar.

Note

In Sidekick versions before 2.0, components can also be created for the set of functions within the current index of the Sidekick Indexes sidebar by clicking on the Create Components in Current Index item in the Plugins/Sidekick menu or Create components for functions in this index icon in the Sidekick Indexes sidebar

How to customize it

The component creation algorithm has several parameters that you can adjust to customize its behavior. To adjust these parameters, go to the Settings tab and locate the Sidekick.components section. The following options are available:

Option Description
Minimum Component Size The minimum number of functions that a component must contain.
The default is 2.
Maximum Component Size The maximum number of functions that a component must contain.
The default is 50.
Component Depth The maximum depth of the component tree.
The default is 3.
Maximum Tier Width The maximum number of components in a tier.
The default is 7.
Maximum Adjacent Distance The maximum distance between adjacent functions in a leaf component.
The default is 1.

Note

The default values for the component clustering options are based on our experience with the most common types of binaries. You can experiment with other values, but the results may vary depending on your binary.

You can configure how components are named. The sidekick.components.naming_convention setting controls the naming convention:

Value Description
any Use whatever names are generated by the model.
snake Formats the variable name as snake_case.
camel Formats the variable name as camelCase.
pascal Formats the variable name as PascalCase.

How to interpret it

The component creation process depends on the features that are available in the binary. Some binaries will have more indicators than others. In general, the components will correspond to logical units of the program and roughly correspond to its compilation units, libraries, or subsystems.