C++ 尝试捕获反射加载的dll
我正在测试这种注入技术(反射dll注入),发现对代码的任何尝试/捕获都会导致一个不可处理的windows错误(KERNELBASE.dll,代码错误e06d7363),并且主机进程死亡 我正在用一个基本函数注入一个测试dll。 工作流程如下: 打印“开始…”然后死亡 我的dllC++ 尝试捕获反射加载的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;
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应用程序。