title: How does decompiling work?
body: <p>I have heard the term "decompiling" used a few times before, and I am starting to get very curious about how it works. </p>
  
  <p>I have a very general idea of how it works; reverse engineering an application to see what functions it uses, but I don't know much beyond that. </p>
  
  <p>I have also heard the term "<em>disassembler</em>", what is the difference between a disassembler and a decompiler?</p>
  
  <p><strong>So to sum up my question(s):</strong> What exactly is involved in the process of decompiling something? How is it usually done? How complicated/easy of a processes is it? can it produce the exact code? And what is the difference between a decompiler, and a disassembler?</p>