Dlaczego natywnego kodu maszynowego nie można łatwo zdekompilować?

W przypadku języków maszyn wirtualnych opartych na kodzie bajtowym, takich jak Java, VB.NET, C #, ActionScript 3.0 itp., Czasami słyszysz o tym, jak łatwo jest pobrać dekompilator z Internetu, uruchomić kod bajtowy za jednym razem, i często, wymyślić coś nie za daleko od oryginalnego kodu...