В моем классе я хочу создавать экземпляр Vectored Exception Handler каждый раз, когда создается экземпляр класса.
Чтобы добиться этого, я решил попробовать написать функцию обратного вызова VEH Мне нужно было, затем преобразовать код в шелл-код и выделить память, записать его и передать его AddVectoredExceptionHandler
каждый раз, когда я хочу создать VEH.
Дело в том, что я не знаю, как создать шелл-код этого кода.
Вот функция (просто скелет, не весь код, который у меня внутри):
long __stdcall VEH(EXCEPTION_POINTERS*) {
return EXCEPTION_CONTINUE_EXECUTION;
}
Вот что такое мой компилятор (Visual Studio) давая мне:
//private:
static long __stdcall _veh(EXCEPTION_POINTERS* except_ptr) {
002B2C80 push ebp
002B2C81 mov ebp,esp
002B2C83 sub esp,0C0h
002B2C89 push ebx
002B2C8A push esi
//private:
static long __stdcall _veh(EXCEPTION_POINTERS* except_ptr) {
002B2C8B push edi
002B2C8C lea edi,[ebp-0C0h]
002B2C92 mov ecx,30h
002B2C97 mov eax,0CCCCCCCCh
002B2C9C rep stos dword ptr es:[edi]
002B2C9E mov ecx,offset _9F70A5B3_main@cpp (02BF035h)
002B2CA3 call @__CheckForDebuggerJustMyCode@4 (02B1244h)
Прежде всего, почему прототип здесь дважды?
Во-вторых, что это за __CheckForDebuggerJustMyCode
вызов?
Кажется, что VS добавляет что-то в мой код. Я знаю, что делает компилятор: добавляет, удаляет и заменяет элементы в моем коде для оптимизации, благодаря библиотекам VSC ++ (распространяемые компоненты), которые добавляют такие вещи, как самопроверка ошибок и т. Д.,
.. .но для создания шелл-кода мне не нужны эти вещи.
Итак,
Как мне go создавать шелл-код? К счастью, со всем остальным я справлюсь