Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
На основе его была разработана библиотека .NET, с использованием которой перехват .NET функций становится достаточно простым в применении.
Написание целого класса для перехвата вызова одного метода выглядит очень громоздко. Было бы удобнее ставить хук таким образом:
using (Hook.On(type, methodName, bindingFlags))
{
// Some code
}А для перехвата нескольких методов можно было бы создать какой-нибудь builder c fluent синтаксисом.
x86:
mov eax, pMethodDesc
mov ebp, ebp
jmp ThePreStub
mov eax, pMethodDesc
mov ebp, esp
jmp ThePreStub
В процессе выполнения при анализе памяти указанный адрес можно явно прочитать по смещению 1 (для x86) или 2 (для x64) переходника с учетом разрядности процессора.
Работоспособность приведенного алгоритма была неоднократно проверена на практике (в том числе, в промышленных разработках) на различных версиях .NET и аппаратных платформах.
Перехват функций .NET/CLR