旧调重弹-SetUnhandledExceptionFilter的使用问题

在 AS ABAP 7.40 SP05 里把 HANA 存储过程纳入 ABAP 生命周期:AMDP 实战示例与踩坑笔记 文章摘要:AMDP(ABAP Managed Database Procedures)是SAP推出的框架,用于在ABAP中管理数据库端的存储过程或函数,特别适用于HANA数据库。它通过将数据库语言(如SQLScript)嵌入ABAP方法,实现数据处理逻辑的"下推"(code pushdown),减少应用层与数据库间的数据传输。AMDP适用于需要数据库特有能力或大规模数据处理的场景,但应优先考虑Open SQL或ABAP CDS等更简单的方案。开发时需注意数据库类型检查、参数前缀(:)等语 阅读详情
旧调重弹-SetUnhandledExceptionFilter的使用问题
kongfoo/2005.12.19

. Delphi中使用SetUnhandledExceptionFilter的问题

  这几天在写一个测试程序,包括使用SetUnhandledExceptionFilter来
反OD调试,关于SetUnhandledExceptionFilter的反调试原理之前(一年前了哈)
simonzh2000等人都有详细讲述,这里就不多讲了,在Delphi里面要用这个
函数却有点问题,先看看代码:

program SetUnhandledExceptionFilterTest;
uses Windows;

procedure Handler;
begin
  MessageBox(Hwnd(0),'Final SEH','.',0);
  asm
    mov eax,1
    retn
  end;
end;

begin
  SetUnhandledExceptionFilter(@Handler);
  asm
    xor edx,edx
    idiv edx
  end;
end.

  很简单的一个程序,但得到的效果却不是预期之中的,在弹出'Final SEH'
之后又弹出一个Runtime error。如果在窗体之中的按钮事件里面写这样的测试
代码的话,效果更加是“离奇”,弹出一个“除0错”之后就没事发生了,根本
没有去Handler里面。
  究其原因,Delphi编译出来的程序有自己的一套用SEH建立起来的异常处理
机构,是自动的,在程序启动之初就建立起来了。就连上面这样简单的程序也一
样,在SetUnhandledExceptionFilter之前就建立了一个SEH结构。如果要达到预
期效果:发生异常时去到我们的Handler里面,然后就完事了,我们就要先清掉
Delphi建立的SEH。再来看看代码:

program SetUnhandledExceptionFilterTest;
uses Windows;

procedure Handler;
begin
  MessageBox(Hwnd(0),'Final SEH','.',0);
  asm
    mov eax,1
    retn
  end;
end;

begin
  //首先要清掉SEH
  asm
   @Loop:
    mov eax,fs:[0]
    cmp dword ptr [eax],$FFFFFFFF
    je @SEHCleared
    mov eax,[eax]
    mov fs:[0],eax
    jmp @Loop
   @SEHCleared:
  end;
  SetUnhandledExceptionFilter(@Handler);
  asm
    xor edx,edx
    idiv edx
  end;
end.

  现在程序按照我们的想法运行了。在窗体的按钮OnClick事件中使用也正常。
SetUnhandledExceptionFilter在高级语言中应用时应该要注意一下这个问题了。
特别是用高级语言写壳用到这个反调试技巧时。另外说一说在异常处理函数返回
值为-1时的问题。hume在《SEH in ASM研究》中的资料说到:

EXCEPTION_EXECUTE_HANDLER equ 1 表示我已经处理了异常,可以优雅地结束了 
EXCEPTION_CONTINUE_SEARCH equ 0 表示我不处理,其他人来吧,于是windows调用默认的处理程序显示一个错误框,并结束 
EXCEPTION_CONTINUE_EXECUTION equ -1 表示错误已经被修复,请从异常发生处继续执行 

  网上搜到一些关于SetUnhandledExceptionFilter的文章演示的都是返回值
为1的情况,而在反调试当中,这种情况是没用的,因为返回到系统之后程序就
结束了,有用的是返回为-1的情况。具体设置和我们平时的SEH异常处理函数类
似,在到达SetUnhandledExceptionFilter指定的异常处理函数之后,[[esp+4]+4]
处就是CONTEXT STRUCT。看代码可以更清晰(测试环境:winxp sp2):

//这里是用SetUnhandledExceptionFilter设置的异常处理函数
@Handler:
  mov eax,[esp+4]
  mov eax,[eax+4]
  add dword ptr [eax+0B8],2 //异常指令2个字节长,加2指向下一条指令。eax指向CONTEXT STRUCT。
  mov eax,-1
  retn

//设置代码:
  push offset @Handler
  call SetUnhandledExceptionFilter
  xor edx,edx
  idiv edx
  nop //可以在这里下断测试(当然,OD要patch UnhandledExceptionFilter)。

  OK,收工。  
如何配置SSC CANopen的excel文件 如何配置 CANOpen 的 EXCEL 文件 阅读详情

相关推荐

海康线扫相机平场矫正实战:从原理到精准成像

本文深入解析了海康线扫相机平场矫正的原理与实战操作。通过拆解暗场与明场矫正的物理意义,揭示了其消除系统噪声、补偿像素响应不均的核心机制。文章详细指导了在海康相机上进行平场矫正的标准化流程、关键参数设置(如行高、灰度值控制)及常见误区,并提供了针对高行频匹配、环境稳定性维护等进阶调优技巧与问题排查指南,旨在帮助用户实现从原理理解到精准成像的跨越。

tomato的博客 793

SetUnhandledExceptionFilter使用

1.前言 几乎每个游戏都或多或少地存在着缺陷,辛辛苦苦完成的游戏要是最终在玩家那里崩溃了,对开发人员来说可能是最不好的消息了。不仅如此,在游戏发布前都需要经 过大量的测试,,通常用于测试的电脑上并不会安装调试环境,因此当游戏崩溃时,往往只能得到一个错误提示。如果能够在游戏崩溃时提供更多的信息,就可以为开 发人员对此进行再现或是进一步调试带来很多方便。 当然,最理想的情况就是在每个测试人员以及每个客户的电脑上安装调试环境,每次都让游戏在 调试模式下运行,这样一旦出现错误,只需要把当时的函数调用栈、各种

理性的幻想 2214

PCIe链路均衡实战:从Preset调节到系数优化的完整指南(附Synopsy IP案例)

本文深入解析PCIe链路均衡技术,从Preset调节到系数优化的全流程实战指南,特别针对PCIe 3.0/4.0中的Recovery.Equalization状态进行详细说明。通过Synopsy IP案例,展示如何应对高速信号完整性挑战,优化前向反馈均衡(FFE)机制,提升系统性能。

peace的博客 1056

使用INT3进行HOOK处理

原理:设置异常捕获,然后将需要HOOK的代码直接修改成INT3即可 用的一个关键的API:SetUnhandledExceptionFilter //异常处理函数 function MyInt3(CONST P:EXCEPTION_POINTERS):Integer;cdecl; var add:Pointer; begin OutputDebugString(PChar(inttohe

IT男也疯狂 2263

从Transformer到蛋白质结构预测:手把手解读ESM系列模型的核心原理与实战价值

本文深入解析了ESM系列模型如何将Transformer架构创新应用于蛋白质结构预测,揭示了其从氨基酸序列到三维结构的高效预测机制。通过掩码语言模型预训练和注意力机制,ESM模型不仅捕捉蛋白质序列的远程相互作用,还在蛋白质工程改造、药物发现等领域展现出巨大实战价值,显著提升了结构预测速度和精度。

weixin_28744423的博客 320

3D点云目标检测Complex-YOLO(训练篇)(一)———KITTI数据集预处理与制作

KITTI dataset Download dataset KITTI 3D Object Detection Evaluation 2017 link 下载四个部分,共41.4GB 解压后为四部分内容(相机校准矩阵calib、RGB图像image_2、标签label_2、点云数据velodyne) 对应的testing和training数据。其中,training数据为7481张(图片和点云对应的场景),testing数据 7518张(无label_2数据)。 Data Preprocess

“知识最大的敌人不是无知,而是错觉” 7153

SetUnhandledExceptionFilter无法捕获异常原因及解决方法

转自:http://name5566.com/934.html 很多 C/C++ 程序会设置自己的 Unhandled Exception Filter 用于捕获 Unhandled exceptions 并输出一些信息(例如,创建 mini-dump 或者输出调用栈到日志文件中)。 从 VC++2005 开始出于安全因素微软改变了 CRT 的行为。在以下情况下 CRT

kevin3683的专栏 2万+

【毕业设计参考】基于yolov8+pyqt5自适应界面设计的锂电池表面缺陷检测系统

基于YOLOv8+PyQt5的锂电池表面缺陷检测系统结合了先进的目标检测技术与友好的用户界面设计,为锂电池质量检测提供了一种高效、准确的解决方案。未来,随着深度学习技术的不断发展,我们可以进一步优化模型,提高检测精度和速度,同时拓展系统功能,如实现实时视频流检测、与生产系统的深度集成等,为锂电池产业的发展注入新的活力。希望本文对大家在相关领域的研究和实践有所帮助,欢迎大家在评论区交流讨论。

1182

Delphi异常机制与SEH

Delphi异常机制与SEH书呆子介绍SEH机制的文章很多,但基本都是C++的,关于Delphi的很少。最近项目需要,仔细阅读了VCL关于异常的处理,有些心得体会,希望和大家一起分享。SEH简介       SEH(struct exception handling)结构化异常处理是WIN32系统提供一种与语言无关的的异常处理机制。编程语言通过对SEH的包装,使程序异常处理更加简单

书呆子的专栏 4591

linux离线安装nginx

linux离线安装nginx

zhang_130914036的博客 9351

2024-江苏科技大学-模拟-动态接触角,模拟液滴撞击,comsol软件模拟。

相反,其对液滴粘度和平衡接触角的变化基本不敏感。重力势能的影响显著受过程参数调节,随着液滴直径和密度的增加而增加,而随着初始液滴速度和表面张力系数的增加而减小。通过考虑形状因子和粘度修正因子,可以准确定义表面能和粘性耗散能,使得所提出的半经验修正勺状模型表现出良好的性能,在所有65个研究案例中,液滴最大铺展长度因子(βmax)和中心厚度(h)的相对误差基本分别落在5%和10%的区间内。重力势能的影响受过程参数显著调节,随液滴直径和密度的增大而增大,随液滴初始速度和表面张力系数的增大而减小。

qq_15963745的博客 512

反调试 - SetUnhandledExceptionFilter

原理 SetUnhandledExceptionFilter 可以注册一个异常处理函数,当一个异常产生且我们的 try - catch(或 try - expect)没有处理处理这个异常时,异常会转交给 SetUnhandledExceptionFilter ,这是我们的应用程序处理异常的最后机会。 我们可以自己触发一个异常,然后不在 try-catch 中处理它,如果存在调试器则调试器就会接管这个异常,那么这个异常就不会走到我们的 SetUnhandledExceptionFilter 注册的异常处理

LYSM 5924

图解联合概率密度、边缘概率密度、条件概率密度之间的关系

简要图解联合概率密度、边缘概率密度、条件概率密度之间的关系

一个搬运知识的笨小孩 2万+

SetUnhandledExceptionFilter捕获所有异常

SetUnhandledExceptionFilter终极大法

YT专栏 1265

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SetUnhandledExceptionFilter让程序优雅的崩溃(转)

虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束。并且发送报告,去掉了系统默认的发送报告的对话框。所以一拍脑袋,想让自己的程序崩溃的体面一点。自己想了大概的思路,觉得可以用一个进程来监控目标程序。的确也可以拿到了目标程序崩溃的信息,知道它什么时候崩溃的,也可以做额外的操作,但是这样是没办法把默认的发送错误的对话框去掉的。然后又有人说是不是采用了

ahoo110的博客 1052

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

DELPHI下API简述

 DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量  auxGetNumDevs API 返回附属设备数量  auxGetVolume API 获取当前卷设置  auxOutMessage API 向输出设备发送消息  auxSetVolume API 设置附属设备卷  AbortDoc AP

老高的博客 2897

[Delphi]使用MAP文件查找程序地址类错误行

在优快云晃悠的时候无意发现MAP文件使用,记录下来供大家学习。 仅通过崩溃地址找出源代码的出错行 相信很多人都曾经遇到自己的程序在执行代码时会跳出“Access xxxxx”地址错误。在通常情况下,我们根据此错误信息追踪不到错误代码行,只能一个个去看代码。特别是自己的软件已经发布,刚开始运行OK,但是时不时会跳出错误---真的是一件很崩溃的事情。可是你知道吗?我们已经拥有去追踪错误的方法,只是你一直不知道而已。 MAP文件 什么是 MAP文件?简单地讲,MAP文件...

842

C++程序崩溃不弹框

SetUnhandledExceptionFilter函数,当系统出现异常没有处理的时候,系统就会调用所设置异常处理函数.     当发生异常时,比如内存访问违例时,CPU硬件会发现此问题,并产生一个异常(你可以把它理解为中断) 然后CPU会把代码流程切换到异常处理服务例程。操作系统异常处理服务例程会查看当前进程是否处于调试状态 如果是,则通知调试器发生了异常,如果不是则操作系统会查看当前线

xiatiankuaizou的专栏 4068

异常处理——异常处理简介之UnhandledExceptionFilter(1)

异常处理流程在软件开发过程中,总会遇到许许多多的bug。如果在开发过程中,出现bug异常,未处理,就会导致程序崩溃。崩溃了,系统会先自动先去处理,一般是UnhandledExceptionFilter这个函数在调试。//未处理异常示例 *(int *)0 = 1 ; //语句错误,未处理一些处理异常的返回值 EXCEPTION_CONTINUE_SEARCH(0)(作为返回值,表示处理失败,系统继

caicaptain 3014

SetUnhandledExceptionFilter不生效

SetUnhandledExceptionFilter不生效。

tulingwangbo的专栏 2239

使用SetUnhandledExceptionFilter让程序优雅的崩溃

虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束。并且发送报告,去掉了系统默认的发送报告的对话框。所以一拍脑袋,想让自己的程序崩溃的体面一点。自己想了大概的思路,觉得可以用一个进程来监控目标程序。的确也可以拿到了目标程序崩溃的信息,知道它什么时候崩溃的,也可以做额外的操作,但是这样是没办法把默认的发送错误的对话框去掉的。然后又有人

海边的猪 3968

dump文件,windbg

dump文件,在VC中的调试还是非常非常非常有用的,因为我们也不会经每一行代码都加上日志,当然如果你愿意,也可以每一行都加上日志; 在Windows上,添加dump文件有两种方法: 方法一:一个是在程序中添加代码; 方法二:修改注册表(参考后面的bat文件写法,在win7上用管理员程序运行);建议用这个方法,方便实用;(http://blog.youkuaiyun.com/hgy413/article/...

chinabinlang的专栏 2万+

SetUnhandledExceptionFilter处理未捕获异常

一、                 首先看下百度上的对此函数的解释。     设置异常捕获函数.   当异常没有处理的时候,系统就会调用SetUnhandledExceptionFilter所设置异常处理函数.   例如一些程序在出错的时候,会向用户报告说程序那出错就是利用这个.例如QQ.. 二、   异常处理中的一部分   当发生异常时,比如内存访问违例时,

chenyujing1234的专栏 2807

[转]通过 SetUnhandledExceptionFilter 来禁止调试的小技巧

src:http://evilcodecave.wordpress.com/2008/07/24/setunhandledexception-filter-anti-debug-trick/ SetUnhandledExceptionFilter() Anti Debug Trickis frequently used, especially inMalware Applications. ...

weixin_30765577的博客 201

使用SetUnhandledExceptionFilter转储程序崩溃时内存DMP

关于程序崩溃时转储内存DMP,可以设置注册表,使程序崩溃时自动转储内存DMP,见程序崩溃时利用注册表自动转储内存DMP。本文要介绍的是使用SetUnhandledExceptionFilter函数在程序崩溃时取得程序内存DMP,并解决一些困扰人的问题。   从名字上就可以看出SetUnhandledExceptionFilter的作用就是设置未捕获异常函数,程序崩溃就是因为有些异常我们没有捕

BeanJoy的专栏 1万+
上一篇: SEH in ASM 研究(一)
下一篇: VC下发布的Release版程序的异常捕捉
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值