首页
社区
课程
招聘
[求助]在ghoffice在unpack都求助过了,就是搞不定delphi版的VEH+硬件断点
发表于: 2013-1-9 20:34 5588

[求助]在ghoffice在unpack都求助过了,就是搞不定delphi版的VEH+硬件断点

2013-1-9 20:34
5588
{line 2030}
const
  EXCEPTION_NONCONTINUABLE     = 1;    { Noncontinuable exception }
  {$EXTERNALSYM EXCEPTION_NONCONTINUABLE}
  EXCEPTION_MAXIMUM_PARAMETERS = 15;   { maximum number of exception parameters }
  {$EXTERNALSYM EXCEPTION_MAXIMUM_PARAMETERS}

type
  PExceptionRecord = ^TExceptionRecord;
  _EXCEPTION_RECORD = record
    ExceptionCode: DWORD;
    ExceptionFlags: DWORD;
    ExceptionRecord: PExceptionRecord;
    ExceptionAddress: Pointer;
    NumberParameters: DWORD;
    ExceptionInformation: array[0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of DWORD;
  end;
  {$EXTERNALSYM _EXCEPTION_RECORD}
  TExceptionRecord = _EXCEPTION_RECORD;
  EXCEPTION_RECORD = _EXCEPTION_RECORD;
  {$EXTERNALSYM EXCEPTION_RECORD}

{ Typedef for pointer returned by exception_info() }

  _EXCEPTION_POINTERS = record
    ExceptionRecord : PExceptionRecord;
    ContextRecord : PContext;
  end;
  {$EXTERNALSYM _EXCEPTION_POINTERS}
  TExceptionPointers = _EXCEPTION_POINTERS;
  EXCEPTION_POINTERS = _EXCEPTION_POINTERS;
  {$EXTERNALSYM EXCEPTION_POINTERS}

这是delphi异常结构体定义,我已经成功设置线程断点,并已经能成功走入异常处理过程

过程如下,其中有错误,我真不知道怎么写才正确

procedure VectoredHandler(info: _EXCEPTION_RECORD);
begin
if info.ExceptionAddress =pointer(@aa) then  //判断异常是否从aa处过来的
//转向自己的流程
end;
end

//以上三处红色都有错误,请问怎么办,这个结构难弄死了,不怎么会编程,帮看下

function InstallVectoredException: boolean;
type
  TAddVectored = function(FirstHandler: integer; VectoredHandler: Pointer): HWND; stdcall;
var
  _pAddVectored: TAddVectored;
begin
  Result := False;
  _pAddVectored := GetProcAddress(LoadLibrary('Kernel32.dll'), 'AddVectoredExceptionHandler');
  if not Assigned(_pAddVectored) then Exit;
  _pAddVectored(1, @VectoredHandler); //安装VEH
  Result := True;
end;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 952
活跃值: (1826)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
VectoredHandler的参数是指针,另ce 6.0的代码里有这东西
2013-1-9 20:41
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
把EIP设置回去然后把错误标志设置成继续运行。。就可以了

你可以在SEH下先尝试  再改成VEH的 这样比较方便调试!
2013-1-9 20:56
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我不会,所以想让你们帮我把红色部分搞下
2013-1-9 21:28
0
雪    币: 256
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
网上有C++版的,本来我也想用DELPHI实现,但后来放弃了,麻烦的
2013-1-13 01:38
0
游客
登录 | 注册 方可回帖
返回
//