wargio / r2dec-js

radare2 plugin - converts asm to pseudo-C code.
514 stars 50 forks source link

Output information required to make new annotations for the decompiler in Cutter #220

Closed NirmalManoj closed 3 years ago

NirmalManoj commented 4 years ago

Description As part of the Improving Decompiler Widget project, we have made a new dedicated context menu for the decompiler in Cutter. These changes can be found in the decompiler-refactoring branch in Cutter and also can be quickly seen from the project linked above. Please have a look at r_annotated_code.h to have an idea of the new annotations added.

Detailed description of the data we will need for each type of annotation

  1. For R_CODE_ANNOTATION_TYPE_FUNCTION_NAME:
    1. Range of the function's name in the entire output.
    2. Name of the function
    3. Address of the function Example JSON output with all this information (that is currently available from r2ghidra-dec)
      {
      "start": 542,
      "end": 555,
      "type": "function_name",
      "name": "sym.Aeropause",
      "offset": 4199038
      }, 
  2. For R_CODE_ANNOTATION_TYPE_GLOBAL_VARIABLE and R_CODE_ANNOTATION_TYPE_CONSTANT_VARIABLE: Note: R_CODE_ANNOTATION_TYPE_CONSTANT_VARIABLE is the annotation type for constant variables with an address. e.g. string literals.
    1. Range of the variable name in the entire output.
    2. Address of the variable Example JSON output with all this information (that is currently available from r2ghidra-dec)
      {
      "start": 73,
      "end": 81,
      "type": "global_variable",
      "offset": 4210780
      }, 
      {
      "start": 453,
      "end": 459,
      "type": "constant_variable",
      "offset": 4202553
      }, 
  3. For R_CODE_ANNOTATION_TYPE_LOCAL_VARIABLE and R_CODE_ANNOTATION_TYPE_FUNCTION_PARAMETER:
    1. Range of the variable name in the entire output.
    2. Name of the variable Example JSON output with all this information (that is currently available from r2ghidra-dec)
      {
      "start": 636,
      "end": 641,
      "type": "local_variable",
      "name": "uVar1"
      }, 
      {
      "start": 625,
      "end": 629,
      "type": "function_parameter",
      "name": "argv"
      },

Here, I'm linking a file with the pdg output and formatted pdgj output of multiple functions that will cover all new types of annotations, and the binary used. AllAnnotationsWithBinary.zip