A computer implemented method of associating an executable file with one or more source code files used to generate the executable file, the method comprising: receiving, by a process of a build system, a request to create a compiler or linker process; loading by the build system a process interception library comprising library initialization code, wherein loading the process interception library causes the library initialization code of the process interception library to preempt the default create-process function with a custom create-process function; determining by the library initialization code whether a first newly created process is a compiler, the compiler being invoked to compile a source code file; upon determining by the library initialization code that the first newly created process is a compiler performing the following steps: after the compiler exits, generating a hash value of the contents of an object file generated by the compiler (1330, 1340); generating an object artifact that identifies the source code file and includes the hash value of contents of the object file generated by the compiler; determining by the library initialization code whether a second newly created process is a linker, the linker being invoked to generate an executable file from one or more object files, including the object file; upon determining by the library initialization code that a second newly created process is a linker: generating a link artifact that includes respective hash values of the contents of each of the one or more object files used to generate the executable file; and providing the link artifact and object artifact to a static analysis system, whereby the static analysis system associates the executable file with source code used to build the executable file including matching hash values in the link artifact with hash values of the contents of one or more object files and identifying source code in source code files identified by object artifacts associated with the one or more object files. receiving, by a process of a build system, a request to create a compiler or linker process; loading by the build system a process interception library comprising library initialization code, wherein loading the process interception library causes the library initialization code of the process interception library to preempt the default create-process function with a custom create-process function; determining by the library initialization code whether a first newly created process is a compiler, the compiler being invoked to compile a source code file; upon determining by the library initialization code that the first newly created process is a compiler performing the following steps: after the compiler exits, generating a hash value of the contents of an object file generated by the compiler (1330, 1340); generating an object artifact that identifies the source code file and includes the hash value of contents of the object file generated by the compiler; after the compiler exits, generating a hash value of the contents of an object file generated by the compiler (1330, 1340); generating an object artifact that identifies the source code file and includes the hash value of contents of the object file generated by the compiler; determining by the library initialization code whether a second newly created process is a linker, the linker being invoked to generate an executable file from one or more object files, including the object file; upon determining by the library initialization code that a second newly created process is a linker: generating a link artifact that includes respective hash values of the contents of each of the one or more object files used to generate the executable file; and providing the link artifact and object artifact to a static analysis system, whereby the static analysis system associates the executable file with source code used to build the executable file including matching hash values in the link artifact with hash values of the contents of one or more object files and identifying source code in source code files identified by object artifacts associated with the one or more object files. generating a link artifact that includes respective hash values of the contents of each of the one or more object files used to generate the executable file; and providing the link artifact and object artifact to a static analysis system, whereby the static analysis system associates the executable file with source code used to build the executable file including matching hash values in the link artifact with hash values of the contents of one or more object files and identifying source code in source code files identified by object artifacts associated with the one or more object files.