Update virtual hook method #6
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently when detouring a virtual function, KHook simply opens the vtable and read the function at the given entry index and uses that as its identifier for the function to detour. This is all well and good, until you consider vtables with duplicate entries (due to compiler optimizations). This means that under some cases the virtual hook callbacks are going to be erroneously invoked for unrelated virtual function calls.
In order to solve the above problem KHook now no longer considers the function address inside the vtable as its identifier, instead the vtable pointer along with the index are used as the unique identifier, furthermore the address present in the vtable is no longer detour'd now KHook directly injects the address of the hook, thereby ensuring that all virtual hooks are now unique.