- UID
- 2
注册时间2004-12-1
阅读权限255
最后登录1970-1-1
总坛主
TA的每日心情 | 开心 2024-12-1 11:04 |
---|
签到天数: 12 天 [LV.3]偶尔看看II
|
- //////////////////////////////////////////////////////////////////////////
- // SEH异常实例 piaoyun
- // www.chinapyg.com
- // 2013-11-28
- //////////////////////////////////////////////////////////////////////////
- #include <windows.h>
- #include <stdio.h>
- // SEH 回调函数
- EXCEPTION_DISPOSITION __cdecl _except_handler (
- struct _EXCEPTION_RECORD *ExceptionRecord,
- void * EstablisherFrame,
- struct _CONTEXT *ContextRecord,
- void * DispatcherContex)
- {
- printf("SEH异常触发:code-0x%x, flags-0x%x\n",
- ExceptionRecord->ExceptionCode,
- ExceptionRecord->ExceptionFlags);
- if(ExceptionRecord->ExceptionCode == STATUS_INTEGER_DIVIDE_BY_ZERO)
- {
- printf("异常类型:STATUS_INTEGER_DIVIDE_BY_ZERO\n");
- printf("当前ECX:%d\n",ContextRecord->Ecx);
- ContextRecord->Ecx = 50;
- printf("修正ECX:%d\n",ContextRecord->Ecx);
- return ExceptionContinueExecution;
- }
- return ExceptionContinueSearch;
- }
- void main()
- {
- _asm
- {
- // 注册SEH
- PUSH offset _except_handler
- PUSH DWORD PTR FS:[0]
- MOV DWORD PTR FS:[0], ESP
- // 造成除零异常
- XOR EDX, EDX
- MOV EAX, 0xC8
- XOR ECX, ECX
- IDIV ECX
- // 取消SEH
- POP DWORD PTR FS:[0]
- POP EAX
- //---或者用下面方法
- //mov eax,[esp]
- //mov fs:[0], eax
- //add esp,8
- }
- printf("SEH实例运行完毕!\n");
- }
复制代码
|
|