1. A method of analyzing executable software code by decompiling said executable code, comprising: parsing said executable code to identify one or more data flows; recursively, for at least one of the identified data flows: discovering a fitting data flow model; optimizing said fitting data flow model to form a refined data flow model; propagating said refined data flow model until substantially all data variables are modeled; and expressing said refined data flow model in an intermediate representation; parsing said executable code to identify one or more control flows; recursively, for at least one of the identified control flows: discovering a fitting control flow model comprising one or more control branches; optimizing said fitting control flow model to form a refined control flow model; propagating said refined control flow model until substantially all said control branches are modeled; and expressing said refined control flow model in an intermediate representation, wherein said refined data flow model and said refined control flow model express a complete nanocode model of said executable software code in said intermediate representation; and performing vulnerability analysis of the complete nanocode model to identify at least one of a flaw and a vulnerability in said executable code.