下面的代码出自CSDN Delphi版的一高人(kiboisme 蓝色光芒)

procedure ExceptProc{ExceptionRecord,SEH,Context,DispatcherContext};assembler;
asm
  MOV  EAX , [ESP+]
  MOV  EAX.TContext.Eip , Offset @@ExceptDone
  MOV  EAX ,
  RET  $;
  @@ExceptDone:
  XOR  EAX , EAX
  MOV  ESP , FS:[EAX+$]
  POP  FS:[EAX]
  POP  EAX
  POPAD
end;

//P As TProcedure /Function xxx : integer/Boolean/More
Function ExceptDoProcedure(P : Pointer) : integer;assembler;
asm
  PUSH EAX                    //被执行函数
  PUSHAD                      //保护现场
  XOR  EAX          , EAX
  PUSH Offset ExceptProc      //异常处理函数
  PUSH FS:[EAX]               //SEH结构
  MOV  FS:[EAX]     , ESP
  MOV  FS:[EAX+$] , ESP
  MOV  DS:[EAX]     , EAX;    //产生异常,触发SEH执行,进而转入P中执行
end;

//调用时
Function DoIt : integer;
begin
  ShowMessage('OK');
  Result := $
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Tag := ExceptDoProcedure(@DoIt);
  Caption := IntToHex(Tag , );
end;

构造SEH来实现跳转-转载的更多相关文章

  1. OpenMP并行构造的schedule子句详解 (转载)

    原文:http://blog.csdn.net/gengshenghong/article/details/7000979 schedule的语法为: schedule(kind, [chunk_si ...

  2. C++反汇编第一讲,不同作用域下的构造和析构的识别

    目录大纲: 1.全局(静态)对象的识别,(全局静态全局一样的,都是编译期间检查,所以当做全局对象看即可.) 1.1 探究本质,理解构造和析构的生成,以及调用方式(重要,如果不想知道,可以看总结.) 2 ...

  3. 异常篇—— VEH 与 SEH

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  4. C++反汇编第二讲,不同作用域下的构造和析构的识别

    C++反汇编第二讲,不同作用域下的构造和析构的识别 目录大纲: 1.全局(静态)对象的识别,(全局静态全局一样的,都是编译期间检查,所以当做全局对象看即可.) 1.1 探究本质,理解构造和析构的生成, ...

  5. 用Python代码实现微信跳一跳作弊器

    最近随着微信版本的更新,在进入界面有个跳一跳的小游戏,在网上看到技术篇教你用Python来玩微信跳一跳 ( 转载自 " 工科给事中的技术博客 " ) 本文旨在总结,技术全靠大神完成 ...

  6. php实现post跳转

    大家否知道php可以利用header('Location')实现get请求跳转. php利用curl可以实现模拟post请求. 但是却找不到php现成的实现post跳转.那么问题来了,如果有这个需求该 ...

  7. Windows下反(反)调试技术汇总

    反调试技术,恶意代码用它识别是否被调试,或者让调试器失效.恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间.为了阻止调试器的分析,当 ...

  8. S2 第二本书 深入.NET平台和C#编程 总结 by天命

    第一章 深入.NET框架 .NET框架 包含 CLR公共语言运行时 FCL框架类库 CLR(Common Language Runtime)公共语言运行时 CLS(Common Language Sp ...

  9. 4_CSRF

    CSRF 当你登录某个网站时,通常浏览器与网站都会形成一个会话,在会话没有结束时你可以执行发表文章.发邮件.删除文章等操作,若会话结束,你再操作的话会提示你会话已经结束,请重新登录.CSRF(客户端跨 ...

随机推荐

  1. Storyboards vs NIB vs Code 大辩论

    前言 做iOS开发的童鞋都应该会纠结一个问题,那就是在做开发的时候是使用StoryBoard还是使用Nibs又或者是Code(纯代码流)呢?笔者也非常纠结这个问题,今天碰巧在raywenderlich ...

  2. android百度地图定位开发

    一.activity import android.app.Activity; import android.graphics.Point;import android.graphics.PointF ...

  3. Linux清空内存缓存

    > /proc/sys/vm/drop_caches

  4. Windows环境下使用Apache+mod_wsgi部署webpy

    1.安装Python和Apache. 2.安装mod_wsgi后获得wsgi.so,并将wsgi.so放到Apache的modules文件夹下. 3.安装webpy. 4.打开httpd.conf(在 ...

  5. loadjs异步加载javascript回调

    function loadjs(url,callback){    var script=document.createElement('script');     script.type=" ...

  6. 【转载】为什么不建议<=3G的情况下使用CMS GC

    之前曾经有讲过在heap size<=3G的情况下完全不要考虑CMS GC,在heap size>3G的情况下也优先选择ParallelOldGC,而不是CMS GC,只有在暂停时间无法接 ...

  7. Oracle计算连续天数,计算连续时间,Oracle连续天数统计

    Oracle计算连续天数,计算连续时间,Oracle连续天数统计 >>>>>>>>>>>>>>>>> ...

  8. s15day12作业:MySQL练习题参考答案

    MySQL练习题参考答案   导出现有数据库数据: mysqldump -u用户名 -p密码 数据库名称 >导出文件路径           # 结构+数据 mysqldump -u用户名 -p ...

  9. JAXB - XML Schema Types, Defining an Enumeration

    If you want a data type that enumerates discrete values you should use a restriction of the schema t ...

  10. c# xml 解析取值

    //字符串 string result = "<?xml version=\"1.0\" encoding=\"utf-8\"?>< ...