Bug Validator is a multi-part program. One part of the program (known as "the stub") is injected or linked into the target program and communicates with the Bug Validator user interface.
The stub is typically injected into the target program using the CreateRemoteThread() Win32 function. Communication between the stub and the user interface is done via named pipes. There is no human readable data format for the communication between the two parts of the program. Both the stub and the user interface are multithreaded. If required the stub can be linked into the program so that it does not need to be injected into the program.
The stub walks the entire program image detecting the start of each source code line using PDB and/or MAP files. Each line is checked to see if it can safely be hooked without corrupting the code for another line or function, or changing the function of the program. If the line can be hooked, it is hooked. If the line cannot be hooked the user interface is informed of the line hook failure.
As your program executes the hooks that were inserted track the program's execution and write it to a buffer that the user interface reads.