es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo desconectarse de un depurador en C++

Estoy trabajando en un programa que necesita desvincular su depurador automáticamente en el lado del dll.

Lo que he intentado es

if (DebugActiveProcessStop(GetCurrentProcessId()))
{
...
};

Pero con GetLastError, siempre obtengo el código de error 0x5, lo cual significa que no tengo suficientes permisos para hacerlo.

Entonces me pregunto cómo puedo desvincular el depurador de mi dll?

Mi proyecto en Github: https://github.com/secsome/FA2sp/blob/master/FA2sp/Miscs/Exception.cpp#L201

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en informática especializado en c++, Windows, depuración y sistemas operativos, sugiero probar la siguiente solución para desprender el depurador del lado del DLL:

    if (IsDebuggerPresent())
    {
        DebugBreak(); // Asegura que el depurador se detiene en esta línea
        FreeLibraryAndExitThread((HMODULE) hModule, 0); // Descarga el DLL y sale del hilo
    }
    

    Este código verificará si hay un depurador presente, luego interrumpirá la ejecución para asegurar que el depurador se detenga en esa línea. Después de esto, se descargará el DLL y se saldrá del hilo, desconectando efectivamente el depurador.

    También puede ser necesario asegurarse de que el código se compile sin símbolos de depuración y de que el DLL se cargue por el proceso objetivo sin ningún tipo de adjunto o restricciones de depuración.

Comments are closed.