
Program Synthesis in Reverse Engineering [pdf] - luu
http://www.nosuchcon.org/talks/2014/D1_01_Rolf_Rolles_Program_Synthesis_in_reverse_Engineering.pdf
======
buttproblem
There's a lot of work going on in this field; if it were really scalable it
would be awesome.

The slides call it academic but it is (barely) moving into industry. One of
the, often cited, commercial uses is in one of the products coming out of
Microsoft Research and into Excel, flash fill.

Another interesting application is synthesizing countermeasures for side
channel attacks in crypto code [1]. They are automatically, based on the
specification, guaranteed secure.

If you can find a good application, like deobfuscation, you can create some
fun stuff.

[1]
[http://www.ece.vt.edu/chaowang/pubDOC/EldibW14CAV.pdf](http://www.ece.vt.edu/chaowang/pubDOC/EldibW14CAV.pdf)

~~~
velox_io
We've been moving in this direction for a while now, decades even. Focussing
on the desired behaviour over implementation, this is especially true for low
level code (managed languages, ORM's, even reducing or picking algorithms,
like the flashfill you mentioned).

Where I think the biggest innovation for this area is the big picture; the
architecture. This is where most of the developers time and effort is spent
today isn't writing new code, it's managing the complexity as software and
systems grow.

Developers should only have to worry about expressing their intent and the
system should take care of optimisation/ partitioning to make the most of the
available systems, memory, IO and CPU. Devop's is ripe to be heavily automated
with self tuning systems.

Going as far to fix legacy software is harder. Nobody sets out to write legacy
code (I've yet to see a legacy system that was untouched because it was
perfect). Making a legacy/ obfuscated system easy to work with and maintain is
the holy grail of such software.

