在VS2008中编译,有如下错误:
1>正在编译...
1>int1.cpp
1>c:\int1\int1.cpp(35) : warning C4733: 内联 asm 分配到“FS:0”: 处理程序未注册为安全处理程序
1>c:\int1\int1.cpp(40) : warning C4733: 内联 asm 分配到“FS:0”: 处理程序未注册为安全处理程序
首先,这个注册安全处理程序要调用什么函数注册?
其次,生成的DEBUG版本程序功能正常,RELEASE版本的点击无反应。
用OD挂上去看了一下,没看太明白。
有能解释一下的吗?
==============================================================
附上原代码:
/*--------------------------------------------------------------
int1.cpp -- 利用int 1检测SoftICE
(c) www.pediy.com 段钢, 2003
--------------------------------------------------------------*/
#include <windows.h>
BOOL SoftICELoaded();
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
if( SoftICELoaded() )
MessageBox(NULL,TEXT ("SoftICE is active!"),TEXT ("OK"),MB_ICONEXCLAMATION);
else
MessageBox(NULL,TEXT ("Can't find SoftICE with this method!"),TEXT ("Error"),MB_ICONEXCLAMATION);
return 0;
}
//////////////////////////////////////////////////////////////////////
// 此法仅Windows 2000/XP系统有效,实际操作时,还必须加入判断操作系统的代码
//////////////////////////////////////////////////////////////////////
BOOL SoftICELoaded()
{
int mark=0;
_asm {
push offset handler
push dword ptr fs:[0] // 建立SEH链
mov dword ptr fs:[0],esp
xor eax,eax
int 1 // 如果SICE已启动,且存在3级调试器,则不发生异常,否则发生异常
inc eax
inc eax
pop dword ptr fs:[0]
add esp,4
or eax,eax
jz found
cmp mark, 0
jnz found
jmp Nofound
handler: // 异常回调处理函数
mov ebx,[esp+0ch]
add dword ptr [ebx+0b8h],02h // CONTEXT.EIP+2
mov ebx,[esp+4]
cmp [ebx], 80000004h // 0C0000005正常,80000004被调试
jz Table
inc mark
Table:
xor eax,eax
ret //表示已经修复,从现在的CONTEXT.EIP处执行
}
Nofound:
return FALSE;
found:
return TRUE;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)