Мониторинг исключений процессов через API отладки - PullRequest
0 голосов
/ 13 марта 2012

Любую помощь для начала использования примера кода можно найти в C ++ / CLI Win32 отладочной библиотеке для x86 для мониторинга исключений процессов.

Код, который я сделал:

using System;
using DebugLibrary;

namespace DebugTeste01
{
    class Program
    {
        static void Main(string[] args)
        {
            DebugUtil.DebugActiveProcess(4932);
            DebugEvent de = new DebugEvent();
            ThreadContext tc = new ThreadContext();
            LDTEntry ldte = new LDTEntry();

            do
            {
                debug_evt = DebugUtil.WaitForDebugEvent(0xffffffff);

                de = (DebugEvent)debug_evt;
                Process proc = Process.GetProcessById(de.processId);

                object meminfo = DebugUtil.GetMemoryInfo(proc.Handle);
                //...
                object modinf = DebugUtil.GetModuleInfo(proc.Handle);
                //...

                switch (debug_evt.GetType().ToString())
                {
                    case "DebugLibrary.DebugEvent_CreateProcess":
                        {
                            DebugEvent_CreateProcess decp = (DebugEvent_CreateProcess)debug_evt;
                            //some action, logging, etc.
                        }
                        break;
                    case "DebugLibrary.DebugEvent_LoadDll":
                        {
                            DebugEvent_LoadDll dect = (DebugEvent_LoadDll)debug_evt;
                            //some action, logging, etc.
                        }
                        break;
                    case "DebugLibrary.DebugEvent_CreateThread":
                        {
                            DebugEvent_CreateThread dect = (DebugEvent_CreateThread)debug_evt;
                            //some action, logging, etc.
                        }
                        break;
                    case "DebugLibrary.DebugEvent_ExitThread":
                        {
                            DebugEvent_ExitThread dect = (DebugEvent_ExitThread)debug_evt;
                            //some action, logging, etc.
                        }
                        break;
                    case "DebugLibrary.DebugEvent_Exception":
                        {
                            DebugEvent_Exception dect = (DebugEvent_Exception)debug_evt;

                            ExceptionRecord exbp = dect.exceptionRecord;

                            switch (exbp.GetType().ToString())
                            {
                                case "Breakpoint":
                                    {
                                        //some action, logging, etc.
                                        exbp = null;
                                    }
                                    break;
                                case "AccessViolation":
                                    {
                                        //some action, logging, etc.
                                        exbp = null;
                                    }
                                    break;
                                //more case
                            }
                        }
                        break;
                    default:
                        {
                            //some action, logging, etc.
                            debug_evt = null;
                        }
                        break;
                }

                try
                {
                    DebugUtil.ContinueDebugEvent(de.processId, de.threadId, false);
                }
                catch
                {
                    break;
                }
            }
            while ( true );
        }
    }
}

[РЕДАКТИРОВАТЬ] 03/14/2012
Хорошая статья: Использование API отладки Windows
[РЕДАКТИРОВАТЬ] 03/14/2012
Улучшения в реализации.
Теперь он имеет начальную конструкцию каркаса для окончательного применения.

1 Ответ

1 голос
/ 13 марта 2012

Мне кажется, вам нужны ресурсы по написанию отладчика для понимания, в этом случае вам лучше всего начать с MSDN , это дает основы того, что и как следует обрабатывать.оттуда действительно зависит от вашего приложения и среды, как вы обрабатываете исключения.

В качестве комментария к фактическому коду, избегайте жесткого кодирования PID, лучше используйте имя процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...