radareorg / r2retdec

RetDec plugin for Radare2
https://retdec.com/
MIT License
124 stars 24 forks source link

Emit new annotations to support new features in the decompiler in Cutter #20

Open NirmalManoj opened 4 years ago

NirmalManoj commented 4 years ago

Description I am making this issue on behalf of the Cutter Team. 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.

For r2retdec to work desirably and support all the actions that are currently available for r2ghidra-dec (in the decompiler-refactoring branch now), it has to provide required annotations.

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. This is just for illustrating the kind of information we need. AllAnnotationsWithBinary.zip

If any more information is needed, I will be happy to help.