WIN32汇编-第13课.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WIN32汇编-第13课

WIN32汇编-第13课 2012年12月26日 星期三 16:55 1.内存断点 要点:内存断点是指令没有执行前就断. ①内存访问断点 读或者写 基本思路:首先将要下内存访问断点的地址修改访问属性为PAGE_NOACCESS,这样如果有指令访问这个地址的内容的时候就会触发访问异常,然后我们在处理访问异常即可.在异常报告结构体EXCEPTION_RECORD最后一个字ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS], 该数组第一个元素访问属性 写异常还是读异常 ,第二个元素指明了不可访问的数据的地址,如图1 图1 异常信息数组的第二个元素包含不可访问元素的地址 注意:C语言用 ExceptionInformation[1],汇编用 ExceptionInformation[4].因为汇编指针数组没有*sizeof TYPE 这里需要一个结构体来管理内存断点信息,结构体定义如图2: 图2 我们以计算器为例,计算器中有一个对某内存地址访问的代码,如图3 图3 我们就实现对1015010h下内存访问断点的功能,首先,定义一个内存断点对象,地址和访问长度填上初始值,如图4 图4 然后在进程创建事件中修改1015010h所在内存页的属性为不允许访问,如图5 图5 必然计算器中有对1015010h地址所在分页的内容访问时就会发生访问异常,所以我们需要在访问异常处理判断访问异常的地址是否和 1015010h处于同一个内存分页,如果不是同一个内存分页,那么久不予处理,如果是同一个内存分页,那么还需要判断该不可被访问的数据 地址是否刚好在我们的设置的内存断点起始地址到结束地址之间,如果在那么就需要显示该条汇编语句,否则,就不显示汇编语句,只是修改 该内存分页属性为原属性,并且要单步一次,即设置TF为1,同时我们需要一个状态标志,设置这个状态标志位TRUE,如图6 图6 接下来单步异常就触发了, 我们这需要在单步异常的处理中判断如果刚刚的那个状态标志位真的话,那么就将不可访问属性重新设置回1015010h所在内存分页,并 状态标志置FALSE,这样就实现永久内存断点,如图7: 图7 效果如图8: 图8 3个都正好吻合. ②内存写入断点 写 同内存访问断点,只需要将属性修改为,PAGE_EXECUTE_READ,如图9 图9 效果同上.

文档评论(0)

kabudou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档