Вся идея состоит в том, чтобы «перезаписать» исходный код, который выполняет Messagebox, на:
JuMP <CustomMessageBoxFunction>
RETurn (back to program execution)
Итак,
Сначала он копирует свой шелл-код в массив JMP:
memcpy(JMP, tempJMP, SIZE);
Затем он копирует байты исходного кода сборки с исходного адреса в свое временное хранилище "oldBytes", чтобы он мог скопировать его обратно после выполнения своей пользовательской функции:
memcpy(oldBytes, pOrigMBAddress, SIZE);
Затем он копирует ранее вычисленный размер адреса в массив JMP сразу после команды jmp:
memcpy(&JMP[1], &JMPSize, 4);
Наконец, его массив JMP [] содержит шелл-код, необходимый для вызова его функции, например,
JMP 1234
RET
поэтому теперь он должен скопировать это в исходные байты, где программа ожидает найти оригинальную функцию MessageBox:
memcpy(pOrigMBAddress, JMP, SIZE);
Теперь перейдем к вашему вопросу, если вы хотите перехватить InsertDate (), тогда вместо pOrigMBAddress вы можете использовать адрес InsertDate.
Но я не уверен, что это будет работать с 64-битными окнами.