首页
社区
课程
招聘
[求助]关于GetExceptionInformation函数的调用
发表于: 2010-3-6 16:51 7481

[求助]关于GetExceptionInformation函数的调用

2010-3-6 16:51
7481
最近在学习Windows核心编程, 碰到了不少问题... 这不, 就卡在GetExceptionInformation这个函数上了
   #include "stdafx.h"
   #include <Windowsx.h>
    #include <tchar.h>
    int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

             GetExceptionInformation();
}

出现的错误代码如下:
error LNK2001: unresolved external symbol "void * __cdecl _exception_info(void)" (?_exception_info@@YAPAXXZ)

然后查看了GetExceptionInformation函数的定义, 代码如下:

#ifdef  _MSC_VER

#define GetExceptionCode            _exception_code
#define exception_code              _exception_code
#define GetExceptionInformation     (struct _EXCEPTION_POINTERS *)_exception_info
(在这里试过 extern "C" {#define GetExceptionInformation     (struct _EXCEPTION_POINTERS *)_exception_info} 但还是不行.) 
#define exception_info              (struct _EXCEPTION_POINTERS *)_exception_info
#define AbnormalTermination         _abnormal_termination
#define abnormal_termination        _abnormal_termination

unsigned long __cdecl _exception_code(void);
void *        __cdecl _exception_info(void);
int           __cdecl _abnormal_termination(void);

#endif


希望哪位高手出来解决下.

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 450
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
稍微提一下, GetExceptionInformation 是个宏,被定义为 _exception_info ,是SEH实现使用的关键字,只能用于捕获异常的过滤条件表达式中。
2010-3-6 19:00
0
雪    币: 173
活跃值: (132)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
核心编程里面就是这么用的, 然后我在调的时候就出现了这个问题, 就把它拿出来试下, 还是一样的问题
2010-3-6 19:07
0
雪    币: 393
活跃值: (100)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
#include <stdio.h>
#include <EXCPT.H>
#include <windows.h>
#include <winnt.h>

int myerror(int code , PEXCEPTION_POINTERS p){
printf("error but corrected %x\n" , code) ;
CONTEXT *c = p->ContextRecord ;
c->Ebx = 1 ;
return -1;
}

int main(){
__try{
__asm{
mov ebx , 0 ;
mov eax , 0 ;
cdq ;
div ebx ;
}
}__except(myerror(_exception_code() , (PEXCEPTION_POINTERS)_exception_info())){

}
return 0 ;
}


http://hi.baidu.com/hplonline/blog/item/2bc327f599e6972cbd31096f.html
2010-3-6 20:17
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
GetExceptionInformation Macro

Retrieves a computer-independent description of an exception, and information about the computer state that exists for the thread when the exception occurs. This function can be called only from within the filter expression of an exception handler.

也就说它只能在__except后面的括号之内,如下:

__try{
  ...
}
__except(GetExceptionInformation(),0)
{
...
}
2010-3-6 23:18
0
雪    币: 173
活跃值: (132)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
楼上各位说的都没错, 当文件的后缀名为.c的时候编译出来没什么问题, 只是当后缀名为.cpp的时候才出现了那个问题.
在文件头部加上:
extern "C" {#define GetExceptionInformation     (struct _EXCEPTION_POINTERS *)_exception_info} 也不行, 咋办啊?
2010-3-7 16:48
0
游客
登录 | 注册 方可回帖
返回
//