获取动态API地址详解定义.pdfVIP

  • 8
  • 0
  • 约1.11万字
  • 约 7页
  • 2021-11-11 发布于福建
  • 举报
;这个程序是从罗云彬老师的《 windows 环境下 32 位汇编语言》书上抄下来的,因为之前看 的时候看得不是很懂,后来总结了一些资料后终于是弄明白了, ;这里贴出我的分析供初学者学习,大神飘过吧,若有不对之处,还请大家提出来。 ;首先是一个 SEH 异常处理代码,这段程序是作为一个子程序来调用的,为了避免使用全局 变量,这里用 _lpSEH 这个参数来传递需要保护的寄存器。 _SEHHandler proc C _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext pushad mov esi,_lpExceptionRecord mov edi,_lpContext assume esi:ptrEXCEPTION_RECORD,edi:ptr CONTEXT mov eax,_lpSEH push[eax + 0ch] pop [edi].regEbp ;恢复 Ebp push[eax + 8] pop [edi].regEip ;恢复 Eip pusheax pop [edi].regEsp assume esi:nothing,edi:nothing popad mov eax,ExceptionContinueExecution ret _SEHHandler endp ; ; 在内存中扫描 Kernel32.dll 的基址 ,重点来了。 ; _GetKernelBase proc _dwKernelRet local @dwReturn pushad mov @dwReturn,0 ;******************************************************************** ; 下面是地址重定位的代码,为了让这个子程序中的两个函数能用到任何地方 ;******************************************************************** call @F @@: pop ebx sub ebx,offset @B ;******************************************************************** ; 下面是创建用于错误处理的 SEH 结构 ;******************************************************************** assume fs:nothing pushebp lea eax,[ebx + offset _PageError] pusheax lea eax,[ebx + offset _SEHHandler] pusheax pushf s:[0] mov fs:[0],esp ;******************************************************************** ; 查找 Kernel32.dll 的基地址 ;******************************************************************** mov edi,_dwKernelRet and edi,0ffff0000h ;重点:为什么要和 0ffff0000h 进行 and 运算?因为 PE文件 被装入内存时是按 64K 对齐的,取 and

文档评论(0)

1亿VIP精品文档

相关文档