• 手动设置SEH


    转载至   http://bbs.pediy.com/showthread.php?t=46690

    一般情况下我们在 VS2005以上都不能手动设置SEH异常处理函数

    因为有 SafeSEH  保护

    但是可以将保护的SEH验证给篡改掉  也就是将 系统的SEH函数JMP我们的异常函数地址

    如下:

    #include "stdafx.h"
    #include <Windows.h>
    
    int    __stdcall CatchProc(EXCEPTION_RECORD* pExcept,void* pErr,void* pContext,void* p_Dis)
    {
    	if (pExcept->ExceptionCode == EXCEPTION_BREAKPOINT)
    	{
    		printf("catched");
    		return 0;
    	}
    	printf("catched");
    	return 1;
    }
    
    
    bool __stdcall SetCatchProc(void*    pCProc)
    {
    	char* p_ExpProcEntry;
    	__asm
    	{
    		mov eax,fs:[0]
    		add eax,4
    		mov eax,dword ptr [eax]
    		mov p_ExpProcEntry,eax
    	}
    	DWORD p_oldProtect = 0;
    	if (VirtualProtect(p_ExpProcEntry,5,PAGE_EXECUTE_READWRITE,&p_oldProtect))
    	{
    		*(BYTE*)p_ExpProcEntry = 0xE9;
    		*(DWORD*)(p_ExpProcEntry+1)=(char*)pCProc-p_ExpProcEntry-5;
    		return true;
    	}
    	return false;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    	SetCatchProc(CatchProc);
    	int i=0;
    	int sum = 5/i;
    	char p1[255];
    	gets(p1);
    	return 0;
    }


  • 相关阅读:
    变量属性
    String类
    Random类
    Scanner类
    文本与文本域对齐
    Java list集合排序
    float属性影响后续元素排版问题
    查询满足条件的最新数据(逐步优化,mysql、达梦数据库)
    关于select下拉框选择触发事件
    JQuery获取父,子,兄弟节点
  • 原文地址:https://www.cnblogs.com/zcc1414/p/3982395.html
Copyright © 2020-2023  润新知