我正在测试这种注入技术(Reflective dll注入)并发现代码上的任何try / catch都会出现unhandle 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;
}
}
任何技术解释?
答案 0 :(得分:0)
这可能是因为在进行注入时未正确设置异常处理。参见https://hackmag.com/uncategorized/exceptions-for-hardcore-users/。
您正在使用哪个库进行注入?它支持SEH吗?或者,如果您自己做的话,是否正在正确注册处理程序?
但是我怀疑问题更为复杂,因为我在标准测试用例中使用支持SEH的lib(SimplePELoader)加载标准内存DLL时遇到了类似的问题。