C++ 尝试捕获反射加载的dll

C++ 尝试捕获反射加载的dll,c++,windows,dll,code-injection,C++,Windows,Dll,Code Injection,我正在测试这种注入技术(反射dll注入),发现对代码的任何尝试/捕获都会导致一个不可处理的windows错误(KERNELBASE.dll,代码错误e06d7363),并且主机进程死亡 我正在用一个基本函数注入一个测试dll。 工作流程如下: 打印“开始…”然后死亡 我的dll bool WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved) { bool bReturnValue = TRUE;

我正在测试这种注入技术(反射dll注入),发现对代码的任何尝试/捕获都会导致一个不可处理的windows错误(KERNELBASE.dll,代码错误e06d7363),并且主机进程死亡

我正在用一个基本函数注入一个测试dll。 工作流程如下: 打印“开始…”然后死亡

我的dll

bool WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved)
{
    bool bReturnValue = TRUE;

    switch (dwReason)
    {   
        case DLL_PROCESS_ATTACH:
            function();
        break;
    }

    return bReturnValue;
}

void function()
{

    cout << "starting..." << std::endl;

    try
    {
        throw std::exception();
    }
    catch (...)
    {
        cout << " exception... " << std::endl;
    }
}
bool WINAPI DllMain(HINSTANCE hinstDLL、DWORD dwReason、LPVOID lpReserved)
{
布尔值=真;
开关(原因)
{   
案例DLL\u进程\u附加:
函数();
打破
}
返回值;
}
空函数()
{

cout这可能是因为在执行注入时未正确设置异常处理。请参阅

您使用什么库进行注射?它支持SEH吗?或者如果您自己进行注射,您是否正确注册了处理程序


然而,我怀疑这个问题更复杂,因为我在使用lib(SimplePELoader)加载标准内存中DLL时遇到了类似的问题这在我的标准测试用例中支持SEH。

你的问题不清楚。
函数是否位于加载的DLL中?是的,函数位于DLL中。它只是从DllMain调用的函数。@Vasily正在加载CRT吗?我想try-catch语句需要CRT。这可以解释崩溃的原因。尝试将此DLL注入到一个简单的使用相同版本的VS编译的helloworld应用程序。