Patent ID: 7818729
Filing Date: 2010-10-19
Classification: G06F

Abstract:
1. A method of certifying compilation of a software program, said method being performed on a certifying computing device, said method comprising: said certifying computing device remotely and securely instructing a dynamic twiddler at least one specified alteration to a software program, said remotely and securely instructing comprises sending at least one instruction over a secure channel; said certifying computing device using a compilation process at a vendor computing device to compile the altered software program; said certifying computing device testing the compiled, altered program; and said certifying computing device certifying the compilation process based at least in part on the testing, wherein said altered software program comprises at least one C or C++ input source file embodying the features defined in full ISO C90 standard and/or full ISO C99 standard and/or the full ISO C++ standard, wherein said compilation process used at the said vendor computing device comprises: said vendor computing device receiving said at least one C or C++ input source file of said altered software program and storing said at least one C or C++ file in a storage, said input source file including therein one or more symbols, each symbol being an expression, a sub-expression, a declaration, an identifier, a function invocation, or a function definition; said vendor computing device reading entries from a bounds data file in which requirements and guarantees for the defined and undefined symbols in said input source file and in one or more object files linked with said input file are maintained; said vendor computing device creating a compilable C or C++ source code including definitions and initializations of a dyna-static table which contains entries of End and Lo addresses of each memory object residing in static storage such that End address of one object is never equal to Lo address of another object; and said vendor computing device compiling said input source file and said compilable C or C++ source code and linking with said linked objects filed into an executable object file, wherein said compiling automatically identifies and/or eliminates substantially all undefined behaviors of said symbols of said input source file by analyzing, prior to generating said executable object file, runtime behaviors of said symbols based on said requirements and guarantees of said each symbol, each requirement and guarantee being an analysis time designation of a runtime state of said symbol, each requirement specifying a required pre-condition of said symbol which when satisfied will not caused said undefined behavior, and each guarantee specifying a resulting post condition upon proper execution of said symbol, wherein an undefined behavior is a runtime behavior of any symbol upon use of any one or more of an erroneous program construct, erroneous data, non-portable program construct, or non-portable data related to a memory object for which said runtime behavior is not specified in the C or C++ standard, and wherein said compiling includes processing an inputs check-list which records checksum information embodying one or more checksum algorithms, at least one of said checksum algorithms replacing each sequence of whitespace by one Space character before checksumming.