Skip to content
  1. Nov 29, 2018
  2. Nov 15, 2018
    • Alessandro Di Federico's avatar
      e2fdee15
    • Alessandro Di Federico's avatar
      Tag `function_call` targeting external symbols · e21eed11
      Alessandro Di Federico authored
      This commit uses SET, information about canonical values and labels to
      detect if an indirect function call is targeting an external symbol.
      
      The strings used for the name of external symbols are uniqued global
      variables. This commit also uses this approach for the disassembly of
      original instructions, which used to be metadata.
      e21eed11
    • Alessandro Di Federico's avatar
      Minor changes · abb47bb9
      Alessandro Di Federico authored
      abb47bb9
    • Alessandro Di Federico's avatar
      Introduce labels, relocation and canonical values · cc4dfbce
      Alessandro Di Federico authored
      So far we've been tracking only base-relative relocations in an ad-hoc
      fashion. This commit introduces a data structure that can describe the
      most common relocations, including those for `.got`, `.got.plt`,
      base-relative and `R_*_COPY`.
      
      A label describes a range of the binary. A label can be generated from a
      symbol (basically assigning a name to range of the binary) or from a
      relocation, describing the content of a certain range.
      
      This commit generates labels from symbols and relocations, including
      MIPS implicit relocations.
      
      This commit also introduces canonical values.
      
      A register can have a canonical value, i.e., a value that register will
      assume when the analyzed module is being run. This is typically useful
      for the value of the global pointer, which is different from one module
      to another but, within a module, is stable.
      
      This commit registers the canonical value of `gp` (in MIPS), if
      available.
      cc4dfbce
  3. Nov 14, 2018
  4. Nov 13, 2018
    • Pietro Fezzardi's avatar
      Update to LLVM 7 · b9273210
      Pietro Fezzardi authored
      Updating to LLVM 7 mainly involved the following steps:
      
      * Upgrade APIs for folding ConstantExpr.
      * Upgrade APIs for GraphTraits.
      * Upgrade APIs for DominatorTreeBase.
      * Upgrade APIs for BinaryFormat to parse ELFs.
      * Fix the LLVM Linker to properly link the QEMU helpers.
      * Disable the new optnone attribute even with optimization -O0. This is
        necessary to allow SROA to do its job properly.
      * Upgrade APIs to delete Instructions.
      * Properly cleaning up orphaned metadata still referring to Instructions
        that have been destroyed. Recent versions of LLVM are more strict in
        this respect, and will assert when compiled in debug.
      * Avoid using LLVM `getGlobalContext` which has been removed from newer
        versions of LLVM.
      * Upgrade tests to use the new APIs.
      * Upgrade APIs for instruction iterators and reverse iterators.
      b9273210
  5. Oct 24, 2018
  6. Oct 16, 2018