1. 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: intercepting a first request to an operating system function, wherein the intercepted first request identifies a first executable to be executed in a first newly created process; determining that the first executable identified by the intercepted first request is a compiler, the compiler being invoked to compile a source code file and generate an object file; invoking the compiler to compile the source code file into the object file; after the compiler exits, generating a first hash value of contents of the object file generated by the compiler; generating an object artifact that identifies the source code file and includes the first hash value of contents of the object file generated by the compiler; intercepting a second request to the operating system function, wherein the intercepted second request identifies a second executable to be executed in a second newly created process; determining that the second executable identified by the intercepted second request is a linker, the linker being invoked to generate an executable file from one or more object files, including the object file; generating a link artifact that includes respective hash values 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 that associates the executable file with source code used to build the executable file by matching hash values in the link artifact with hash values of the 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.