Skip to content

Open Challenges

Sandeep Dasgupta edited this page Mar 6, 2017 · 2 revisions

Decompilation of OO features

  • identifying static methods (which do not use the this pointer)
  • inlined constructors and destructors
  • elimination of virtual table references in constructors through optimization
  • distinguishing composition from inheritance
  • re-covering public/private/protected method attributes
     class Base {
     public:
       virtual void func_pvt() {
         std::cout << "In Base\n";
       }
       void func_pub() {
       func_pvt();
      }
     private:
    };
    
    

class Derived : public Base { public: private: void func_pvt() { std::cout << "In Derived\n"; } };

int main() { Base *b = new Derived(); b->func_pvt(); return 0; }

The access control applied to virtual functions is determined by the type used to make the function call. Overriding declarations of the function do not affect the access control for a given type. This is because 'access specifiers' are a compile time phenomonon. Hence Punting it.
- handling templates.

### Identifying structs and arrays in global memory and stack 
- Challenge with global memory regions is because a program can directly access their elements with a fixed virtual address in-stead of using a base pointer and an offset. 
- In the stack, their elements can be accessed through their base pointer, but also through the base pointer of the stack frame, which may differ if there is another local variable in the stack before the beginning of the record/array.

### Application of source level analysis on binary
- The application of static shape analysis would enhance the type coverage of static analysis platforms such as SECONDWRITE and BAP. The challenge will be scalability, as static shape analysis has proven expensive even on source code.