getsehaddr.cpp

来自「这个程序很小」· C++ 代码 · 共 50 行

CPP
50 行
字号
// GetSEHADDR.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h> 
#include <windows.h> 
#include <conio.h>
#include <ctype.h>

void main() 
{
	__asm
{
	mov eax, fs:[00000000h];//取得Exception Register的入口地址	
loc_03:
	cmp eax, 0ffffffffh
	jz loc_14
	mov ebx, eax
	mov eax, [eax];//[eax]为pre//[eax+4]为handler
	jmp loc_03
loc_14:
	xor bx, bx
loc_6c:
	cmp word ptr [ebx], 5a4dh;//MZ
	jnz loc_81
	mov eax, [ebx+003ch]
	cmp dword ptr [eax + ebx], 4550h;//PE
	jz loc_89
loc_81:
	sub ebx, 00010000h
	jmp loc_6c
loc_89:
}
/*
    unsigned int sehaddr; 
    int *un; 
    HMODULE hk = LoadLibrary("KERNEL32.dll"); 
    un = (int *)GetProcAddress(hk,"SetUnhandledExceptionFilter"); 
    _asm{ 
        mov eax,un 
        add eax,5 
        mov ebx,[eax] 
        mov sehaddr,ebx 
    } 
    printf("the top seh: 0x%x\r\n",sehaddr); 
    _getch(); 
*/
    return; 
} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?